gpt4 book ai didi

c++ - 将数组追加到 vector 中

转载 作者:太空狗 更新时间:2023-10-29 23:48:51 28 4
gpt4 key购买 nike

我认为这是一个微不足道的问题,但我找不到具体的解决方案。我正在尝试使用 push_back() 函数将数组追加到 vector 中。这是代码:

int main()
{
std::vector<int*> matchVector;

int msmTemp[3];

msmTemp[0] = 1;
msmTemp[1] = 2;
msmTemp[2] = 3;
matchVector.push_back(msmTemp);
msmTemp[0] = 4;
msmTemp[1] = 7;
msmTemp[2] = 0;
matchVector.push_back(msmTemp);

for(auto i : matchVector)
{
for(int j = 0; j<3; j++)
{
cout<<i[j]<<", ";
}
cout<<"\n";
}

return 0;
}

我得到的输出是 4,7,0 两次。我不明白为什么我看不到以前的值,即 1、2、3?是不是因为上面定义的vector matchVector的类型?我认为它只需要是数组。

最佳答案

int* 是一个指向整数的指针。

int[3] 是一个包含 3 个整数的数组。

一个由 3 个整数组成的数组“衰减”到指向第一个元素的指针。

当您执行 push_back(msmTemp) 时,您会将指向 msmTemp 的第一个元素的指针插入 vector

C++ 中的指针不拥有它们指向的对象。两个 push_back 之后的 vector 包含两个指针,都指向同一个数组 msmTemp

当您稍后迭代该 vector 时,您将依次获得两个指针。每个都指向 msmTemp

然后您可以使用 [] 来索引这些指针。当您有指向数组第一个元素的指针时,您可以使用 [] 访问数组的其他元素。 [0] 是第一个元素,[1] 第二个,等等。

所以您查看 msmTemp 中的 3 个元素(幸运的是它有 3 个)并查看它们两次,因为您在 vector 中有两个指向它的指针。

你可以像这样注入(inject)元素:

std::vector<int> matchVector;
int msmTemp[3];
msmTemp[0]={1};
msmTemp[1]={2};
msmTemp[2]={3};
matchVector.insert( matchVector.end(), std::begin(msmTemp), std::end(msmTemp) );

等最终得到一个包含 6 个元素的 vector ,而不是两个数组。

如果你想要数组作为值,你需要std::array:

std::vector< std::array<int,3> > matchVector;
std::array<int, 3> msmTemp;

然后您的代码就可以正常工作了。 std::array 是一种类似于原始数组的库类型,但它没有原始数组的指针衰减问题。

关于c++ - 将数组追加到 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51326004/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com