gpt4 book ai didi

c++ - 在 C++ 中返回 vector 的行为不一致

转载 作者:搜寻专家 更新时间:2023-10-31 00:25:45 24 4
gpt4 key购买 nike

我正在使用 C++ (11) 开发一个项目,但在从函数返回 vector 时遇到了一些问题。我的问题的一个最小工作示例如下:

#include <iostream>
#include <vector>

using namespace std;

vector<int*> find_items()
{
vector<int*> items;
int a[2] = {1,2};
items.push_back(a);
cout << items.at(0)[0] << endl;
return items;
}

int main()
{
vector<int*> items = find_items();
cout << items.at(0)[0] << endl;
return 0;
}

我希望能够为我的项目使用大小为 2 的数组 vector ,因此我使用了指向这些数组第一个元素的指针 vector 。这似乎工作正常,除非我需要从函数返回这样的 vector 。

在这段代码中,从我天真的角度来看,我应该在两个 cout 上得到相同的输出,但第二个输出似乎是一个垃圾数字。

我读到过,当函数返回一个 vector 时,c++ 会返回一个 vector 的拷贝。但是在那种情况下,不会在 vector 的拷贝中创建指向同一内存的新指针吗?我的猜测是这些新指针实际上指向了错误的位置。这个拷贝不够深,还是类似的东西?在这种情况下返回 vector 的正确方法是什么?

非常感谢您的帮助!

最佳答案

您正在 find_items 中创建一个数组.在此函数结束时,数组被销毁。指针无效。行为未定义。使用 vector<vector<int>>vector<array<int>>而不是 vector<int*> .

#include <iostream>
#include <vector>
#include <array>

using namespace std;

vector<array<int, 2>> find_items()
{
vector<array<int, 2>> items;
array<int, 2> a = {1,2};
items.push_back(a);
cout << items.at(0)[0] << endl;
return items;
}

int main()
{
vector<array<int, 2>> items = find_items();
cout << items.at(0)[0] << endl;
return 0;
}

关于c++ - 在 C++ 中返回 vector 的行为不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55081872/

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