用基于范围的for循环填充指针向量

Fill a vector of pointers with a range-based for loop

本文关键字:循环 for 填充 指针 向量 于范围 范围      更新时间:2023-10-16

用矢量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;
}

我确信我有一些很简单的错误,但在四处搜索后还是没能解决。谢谢大家!

通过引用获取元素:

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

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

通过引用迭代,每个r引用v中的元素,因此表达式&r的地址正确地检索元素的地址。