如何正确创建数组向量?
我是 C++ 的新手,我正在尝试创建一个 std::vector 数组,但是每当我 push_back 一个新元素时,似乎所有以前的元素都被我刚刚添加的新值覆盖。(我需要使用 c++ 默认数组而不是 std::array 或其他容器,因为我需要将它们传递给只接受这些数组的函数)。
以下代码和输出显示了正在发生的事情的示例:
std::vector<int*> tuples;
for( int i = 0; i < 10; i++ )
{
for( int j = 0; j < 5; j++ )
{
int tuple[] = { i, j };
tuples.push_back( tuple );
}
}
for( int i = 0; i < tuples.size(); i++ )
std::cout << i << " " << tuples[i][0] << " " << tuples[i][1] << std::endl;
最后,向量中的每个数组都有元素 {9, 4},分别是 i 和 j 到达的最后一个值
回答
在循环的每次迭代中,您不是推回数组,而是推回指向具有自动存储持续时间的数组的指针,然后该指针超出范围。(从概念上讲,每次迭代都会创建一个新数组,但实际上编译器会对其进行优化。)
因此,您最终会得到 a std::vectorof 悬空指针,并且尝试取消引用这些指针的行为是undefined。
一种解决方案是使用 astd::array作为std::vector有效载荷。请注意,它std::array有一个data()产生底层数组的函数 - 这将提供与需要int*参数的函数的兼容性。