在定义的位置初始化向量向量 - 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&lt;std::vector&lt;CV:Point&gt;, N&gt;,其中N 是固定的行数。如果没有,您也可以考虑使用std::unordered_map&lt;int,std::vector&lt;CV::Point&gt;&gt;,它会在您首次通过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+1location 来自哪里? 太好了,谢谢@ArmenTsirunyan @nijansen 谢谢,您和 Armen 同时提供了几乎相同的答案。欣赏它。【参考方案2】:

std::vector&lt;T&gt; 初始化大小为 0,因此vecvec[2] 很可能会导致您的崩溃。你可以用一定的大小来初始化vecvec

std::vector<std::vector<CV::Point> vecvec(10);

【讨论】:

我需要动态初始化它。如果需要更多行,是否可以稍后自动更改它? @SJ 当然,正如我在另一个答案中评论的那样,您可以根据需要多次更改它。虽然它不会“自动”发生。

以上是关于在定义的位置初始化向量向量 - C++的主要内容,如果未能解决你的问题,请参考以下文章

初始化向量 (C++)

在 C++ 中的 main() 之前初始化向量

在 C++ 中初始化非常大的向量

运行时在构造函数中初始化向量类成员——C++

用向量 c++ 中的指针成员初始化对象

如何在 C++ 中初始化向量 [重复]