在定义的位置初始化向量向量 - C++
Posted
技术标签:
【中文标题】在定义的位置初始化向量向量 - C++【英文标题】:Initialize a vector of vectors at a defined location - C++ 【发布时间】:2013-09-26 08:16:30 【问题描述】:是否可以在指定位置初始化点向量的向量?!
即
std::vector<std::vector<CV::Point> vecvec;
std::vector<CV::Point> vecpnt;
CV::Point pnt;
pnt.x = px;
pnt.y = py;
vecpnt.push_back(pnt);
然后将vecpnt插入/推送到vecvec的第二行。假设 vecvec 不为空。
我试过了:
vecvec[location].push_back(vecpnt); // Say _location_ is set to two.
我没有收到任何错误,但我的代码在编译后立即中止。
感谢您的帮助。
【问题讨论】:
vecvec
中是否至少包含三个项目?
喜欢vecvec[1][1] = pnt;
?
不!它需要三个项目才能工作吗?!
@KerrekSB 我真的做不到。我正在尝试每隔 40 帧以质心自动初始化它。
如果向量(行)的数量在编译时是已知的,那么您最好使用std::array<std::vector<CV:Point>, N>
,其中N
是固定的行数。如果没有,您也可以考虑使用std::unordered_map<int,std::vector<CV::Point>>
,它会在您首次通过operator []
访问时自动添加相关索引
【参考方案1】:
您需要先调整vecvec
的大小。它应该有多少个“位置”?假设 MaxLocations。那你就做
vecvec.resize(MaxLocations);
vecvec[location] = vecpnt;
如果你事先不知道尺寸,你可以这样做:
if(location >= vecvec.size())
vecvec.resize(location+1);
vecvec[location] = vecpnt;
【讨论】:
我需要动态初始化它。我不知道 MaxLocation 会是什么! @SJ 您可以根据需要多次调整大小,但在访问vecvec[x]
之前,您的大小必须至少为x+1
。 location
来自哪里?
太好了,谢谢@ArmenTsirunyan
@nijansen 谢谢,您和 Armen 同时提供了几乎相同的答案。欣赏它。【参考方案2】:
std::vector<T>
初始化大小为 0,因此vecvec[2]
很可能会导致您的崩溃。你可以用一定的大小来初始化vecvec
:
std::vector<std::vector<CV::Point> vecvec(10);
【讨论】:
我需要动态初始化它。如果需要更多行,是否可以稍后自动更改它? @SJ 当然,正如我在另一个答案中评论的那样,您可以根据需要多次更改它。虽然它不会“自动”发生。以上是关于在定义的位置初始化向量向量 - C++的主要内容,如果未能解决你的问题,请参考以下文章