Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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++ 将值分配给std::vector_C++_C - Fatal编程技术网

C++ 将值分配给std::vector

C++ 将值分配给std::vector,c++,c,C++,C,我正在处理图像并计算对象的radon变换。计算变换的函数接受向量作为输入: pixel p; vector<pixel> segObj //segObj is the object segmneted from the image 目前,我正在对向量进行元素赋值: for(int ix=0; ix < element_count; ix++) { f.x = xCoordArray[ix]; f.y = yCoordArray[ix]; segObj.push_back(f

我正在处理图像并计算对象的radon变换。计算变换的函数接受向量作为输入:

pixel p;
vector<pixel> segObj  //segObj is the object segmneted from the image
目前,我正在对向量进行元素赋值:

for(int ix=0; ix < element_count; ix++)
{
f.x = xCoordArray[ix];
f.y = yCoordArray[ix];
segObj.push_back(f);
//xCoordArray and yCoordArray are computed separately
}
for循环使处理大型图像时速度变慢。有没有办法将xCoordArray和yCoordArray直接分配给vectorsegObj

我不熟悉矢量的使用,因此任何帮助都将不胜感激。 而且
如果xCoordArray、yCoordArray可以作为向量计算,那么有没有一种方法可以将它们连接起来,使每个向量索引都作为两个值

速度慢的一个原因是,在for循环执行时,向量进行了重新分配和复制。在您的情况下,您可以这样做:

segObj.reserve(element_count); //DO THIS

for(int ix=0; ix < element_count; ix++)
{
  f.x = xCoordArray[ix];
  f.y = yCoordArray[ix];
  segObj.push_back(f);
}
注意,它调用,而不是向后推。此成员函数仅适用于C++11;它在适当的位置构造像素对象。添加到矢量时不复制像素对象:

for(int ix=0; ix < element_count; ix++)
{
f.x = xCoordArray[ix];
f.y = yCoordArray[ix];
segObj.push_back(f);
//xCoordArray and yCoordArray are computed separately
}
模板<类。。。Args> 无效放置返回参数(&U)。。。args;自C++11以来

将新元素追加到容器的末尾。元素是就地构造的,即不执行复制或移动操作。调用元素的构造函数时使用的参数与提供给函数的参数完全相同


速度慢的一个原因是在for循环执行时由向量进行重新分配和复制。在您的情况下,您可以这样做:

segObj.reserve(element_count); //DO THIS

for(int ix=0; ix < element_count; ix++)
{
  f.x = xCoordArray[ix];
  f.y = yCoordArray[ix];
  segObj.push_back(f);
}
注意,它调用,而不是向后推。此成员函数仅适用于C++11;它在适当的位置构造像素对象。添加到矢量时不复制像素对象:

for(int ix=0; ix < element_count; ix++)
{
f.x = xCoordArray[ix];
f.y = yCoordArray[ix];
segObj.push_back(f);
//xCoordArray and yCoordArray are computed separately
}
模板<类。。。Args> 无效放置返回参数(&U)。。。args;自C++11以来

将新元素追加到容器的末尾。元素是就地构造的,即不执行复制或移动操作。调用元素的构造函数时使用的参数与提供给函数的参数完全相同


您可以创建一个生成像素对象的输入迭代器,并直接分配这些对象。您可以使用以下方法直接初始化对象:

pixel iterator::operator*() const {
    pixel rc = {
        xCoordArray[index],
        tCoordArray[index]
    };
    return rc;
}

也就是说,我有点怀疑这是否真的是瓶颈:您是分析了代码还是怀疑这是问题所在?

您可以创建一个生成像素对象的输入迭代器并直接分配这些对象。您可以使用以下方法直接初始化对象:

pixel iterator::operator*() const {
    pixel rc = {
        xCoordArray[index],
        tCoordArray[index]
    };
    return rc;
}

尽管如此,我还是有点怀疑这是否真的是瓶颈:您是否分析了您的代码,或者您是否怀疑这就是问题所在?

您是否尝试过使用segObj.reservelement\u count;在forloop之前,使向量在插入过程中不调整大小,并使推回成为一个恒定时间操作?您是否尝试过使用segObj.reserveelement\u计数;在forloop之前,这样向量在插入过程中就不会调整大小,而推回操作就变成了一个固定时间操作?谢谢你的回复。实际上,我已经在使用reserve,但是当像素数>2000时,几乎没有什么改进。我想删除for循环,但由于每个索引都有两个值x,y,所以使用这样的函数并不简单。assign@user1291412:即使您可以使用“分配”,它仍将处于运行状态。我怀疑这是否是你计划中的真正瓶颈。谢谢你的回复。实际上,我已经在使用reserve,但是当像素数>2000时,几乎没有什么改进。我想删除for循环,但由于每个索引都有两个值x,y,所以使用这样的函数并不简单。assign@user1291412:即使您可以使用“分配”,它仍将处于运行状态。我怀疑这是否是你计划中的真正瓶颈。