小编cat*_*ish的帖子

与C ++中返回向量的行为不一致

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

我希望能够为我的项目使用大小为2的数组的向量,因此我正在使用指向这些数组的第一个元素的指针的向量。除非我需要从函数返回这样的向量,否则这似乎很好用。

从我幼稚的角度来看,在这段代码中,我应该在两个cout处获得相同的输出,但是第二个输出似乎是一个垃圾编号。

我已经读过,当函数返回一个向量时,c ++将返回向量的副本。但是在那种情况下,不会在向量的副本中创建指向相同内存的新指针吗?我的猜测是这些新指针实际上指向错误的位置。这个副本不够深,或者类似吗?在这种情况下返回向量的正确方法是什么?

非常感谢您的帮助!

c++ pointers vector

2
推荐指数
1
解决办法
69
查看次数

标签 统计

c++ ×1

pointers ×1

vector ×1