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

时间:2017-09-13 08:11:29

标签: c++ arrays vector stdvector c++03

我的代码必须在多个平台(Linux,Mac,Windows)和架构(32/64位)上运行,并具有多个编译器(GCC,MSVC,Intel)。在瓶颈代码中,我已经分配了std::vector<double> x,其大小为&gt; 0.使用给定的常量值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

2 个答案:

答案 0 :(得分:13)

您可以use std::fill填充整个矢量

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

答案 1 :(得分:5)

替代方法是使用接受两个元素的向量constructor overload,一个是大小(元素数量,因为在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 << ' ';
    }
}