用常量值填充 std::vector<double>

Fill a std::vector<double> with a constant value

本文关键字:常量 double gt lt std vector 填充      更新时间:2023-10-16

我的代码必须在多个平台(Linux,Mac,Windows)和架构(32/64位)上运行,并具有多个编译器(GCC,MSVC,Intel)。在瓶颈代码段中,我有一个已经分配的大小为> 0 的std::vector<double> x。用给定的常量值填充它的最佳方法是什么c

我的第一个方法是循环:

for(std::size_t i = 0; i < x.size(); ++i)
x[i] = c;

循环也可以使用迭代器完成:

for(std::vector<double>::iterator it = x.begin(); it != x.end(); ++it)
*it = c;

我也可以使用类std::vector给出的赋值函数,并对如果大小相同(我希望)没有重新分配这一事实充满信心:

x.assign(x.size(), c);

有没有一种标准方法可以非常有效地做到这一点?(我无法测试所有可能的配置,我需要标准或良好的体验响应)。

注1:我不想要使用asm的解决方案

注意 2:出于兼容性原因,我不使用 C++11

您可以使用std::fill填充整个向量

std::fill(v.begin(), v.end(), c);

另一种方法是使用接受两个元素的向量的构造函数重载,一个是大小(元素计数,因为在 C++11 之前的编译器上),另一个是填充它的元素:

#include <iostream>
#include <vector>
int main(){
const double c = 123.45;
std::vector<double> v(100, c);
for (std::vector<double>::const_iterator it = v.begin(); it != v.end(); ++it){
std::cout << *it << ' ';
}
}