Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用常量加载STL向量_C++_Vector - Fatal编程技术网

C++ 如何使用常量加载STL向量

C++ 如何使用常量加载STL向量,c++,vector,C++,Vector,如果我有一个向量的大小已经调整为1200,那么在每个插槽中加载具有相同值的向量的最佳方法是什么?编译时该值未知 现在我只使用一个循环遍历所有1200个插槽,并将每个插槽设置为该值。我想知道这是不是最好的方法 您可以使用std::vector构造函数 显式向量(大小\u类型n,常量值\u类型&val=value\u类型(), 常量分配器类型&alloc=allocator类型() 下一条路 vector<double> myVector; double value = 1.; myVe

如果我有一个
向量
的大小已经调整为1200,那么在每个插槽中加载具有相同值的向量的最佳方法是什么?编译时该值未知


现在我只使用一个循环遍历所有1200个插槽,并将每个插槽设置为该值。我想知道这是不是最好的方法

您可以使用
std::vector
构造函数

显式向量(大小\u类型n,常量值\u类型&val=value\u类型(),
常量分配器类型&alloc=allocator类型()

下一条路

vector<double> myVector;
double value = 1.;
myVector = vector<double>(1200, value);

您可以使用
std::vector
构造函数

显式向量(大小\u类型n,常量值\u类型&val=value\u类型(),
常量分配器类型&alloc=allocator类型()

下一条路

vector<double> myVector;
double value = 1.;
myVector = vector<double>(1200, value);
可以使用循环展开:

std::vector my_vector(1200);
对于(int i=0;i<300;i+=4)
{
my_向量[i+0]=值;
my_向量[i+1]=值;
my_向量[i+2]=值;
my_向量[i+3]=值;
}
我建议在循环中处理分配的数量。这里的想法是减少增量和分支的开销(执行更多的数据操作)

可以使用循环展开:

std::vector my_vector(1200);
对于(int i=0;i<300;i+=4)
{
my_向量[i+0]=值;
my_向量[i+1]=值;
my_向量[i+2]=值;
my_向量[i+3]=值;
}

我建议在循环中处理分配的数量。这里的想法是减少增量和分支的开销(执行更多的数据操作)

。调整大小时,可以为新元素提供初始值作为第二个参数。初始化向量时,还可以为每个元素提供初始值。如果你在知道初始值之前调整大小,你能推迟调整大小直到你有了这个信息吗?我预先做了调整大小的方法,我所有的向量大小都是1200。我在一个函数中调整它们的大小。但它们以不同的方式加载数据,这只是一个例子。当然,对于每个向量,要加载的值是不同的。。。我只是希望有一种更简洁的方法来加载向量。最好的方法是查找平台的处理器指令集,看看它是否有将内存块设置为寄存器中的值的指令。其次,最好是并行执行该操作。否则,该方法不重要(
std::fill
for
循环)。您可以尝试“循环展开”,以便在每次迭代中编写一个块(例如12个单元格)。@ThomasMatthews
std::fill
应执行平台上可用的任何优化。调整大小时,您可以提供新元素的初始值作为第二个参数。初始化向量时,还可以为每个元素提供初始值。如果你在知道初始值之前调整大小,你能推迟调整大小直到你有了这个信息吗?我预先做了调整大小的方法,我所有的向量大小都是1200。我在一个函数中调整它们的大小。但它们以不同的方式加载数据,这只是一个例子。当然,对于每个向量,要加载的值是不同的。。。我只是希望有一种更简洁的方法来加载向量。最好的方法是查找平台的处理器指令集,看看它是否有将内存块设置为寄存器中的值的指令。其次,最好是并行执行该操作。否则,该方法不重要(
std::fill
for
循环)。您可以尝试“循环展开”,以便在每次迭代中编写一个块(例如12个单元格).@ThomasMatthews
std::fill
应执行平台上可用的任何优化。如果启用了优化,编译器应执行此操作,这将对平台有益。如果启用了优化,编译器应执行此操作,这将对平台有益
std::vector<double> my_vector(1200);
for (int i = 0; i < 300; i += 4)
{
    my_vector[i + 0] = value;
    my_vector[i + 1] = value;
    my_vector[i + 2] = value;
    my_vector[i + 3] = value;
}