1

用向量元素的地址填充指针向量的这段代码v可以正常工作:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> v{ 1,2,3,4,5 };
    vector<int*> pv;
    for (unsigned int i = 0; i < size(v); i++)
        pv.push_back(&(v[i]));
    for (auto i : pv)
        cout << i << " ";
    cout << endl;
    return 0;
}

我将如何使用基于范围的 for 循环获得相同的结果。我试过这样的代码,但它不会正确填充指针向量:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> v{ 1,2,3,4,5 };
    vector<int*> pv;
    for (auto i : v)
        pv.push_back(&i);
    for (auto i : pv)
        cout << i << " ";
    cout << endl;
}

我确定我有一些非常简单的错误 - 但经过一番搜索后无法解决。感谢大家!

4

1 回答 1

6

通过引用获取元素:

for (auto& r : v)
    pv.push_back(&r);

您最初的基于范围的 for 循环按值迭代向量,使每个元素成为i每个项目的新副本。因此,表达式&i不会检索内部元素的地址v

通过引用进行迭代, eachr引用了里面的元素v,因此 address-of 表达式&r正确地检索了元素的地址。

于 2018-07-17T07:10:59.240 回答