有没有办法访问/取消引用并查找存储在双指针向量中的元素的值? [关闭]

Posted

技术标签:

【中文标题】有没有办法访问/取消引用并查找存储在双指针向量中的元素的值? [关闭]【英文标题】:Is there a way to access/dereference and find value of element stored in a vector of double pointers? [closed] 【发布时间】:2019-05-21 07:33:45 【问题描述】:

基本上我有两个向量,一个类型(称为外部)包含指向另一个向量的元素,该向量的元素是类型(以下称为内部),并且存储为内部元素的指针指向 int 类型数组。

我想访问存储的数组的元素。我该怎么办?

【问题讨论】:

请不要描述代码,贴出来。显示相关向量的定义,以及您想要访问的内容。 欢迎来到 SO!请发布代码 sn-p 显示您尝试访问容器元素的尝试。这将帮助我们帮助您。 我已经回滚了另一个用户所做的编辑,因为我觉得它通过添加原始信息中没有的信息改变了问题的含义。恕我直言,这也没有什么意义。 首先,在 C++ 程序中使用双指针向量是非常可疑的。你的整体方法看起来是错误的。但是无论如何,如果没有任何代码,您的问题就太不清楚了。请edit您的问题并添加一些相关代码。阅读:How to Ask 指向向量元素的指针非常脆弱——如果底层存储被重新分配,它们就会变得无效。考虑存储索引而不是指针。 【参考方案1】:
const int num = 2;
int arr[num];
arr[0] = 123;
arr[1] = 456;

vector<int*> inner;
vector<int**> outer;

inner.reserve(num);
outer.reserve(num);

for(int i = 0; i < num; ++i)

    inner.push_back(&arr[i]);
    outer.push_back(&inner[i]);


cout << "before:";
for (int i : arr) 
    cout << i << " ";

cout << endl;

for(int i = 0; i < num; ++i) 
    **(outer[i]) *= 2;


cout << "after:";
for (int i : arr) 
    cout << i << " ";

cout << endl;

输出:

之前:123 456 之后:246 912

Live Demo

【讨论】:

以上是关于有没有办法访问/取消引用并查找存储在双指针向量中的元素的值? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

通过指针、强制转换和取消引用加载向量?

无法取消引用插入到向量中的类对象指针

是否使用指针或引用来访问向量,然后遍历它缓存不友好?

在 C++ 中,如何获取指向向量的指针?

XMM 寄存器中的取消引用指针(收集)

有没有办法在销毁链表时取消引用 nullptr 时停止接收异常错误?