用基于范围的 for 循环填充指针向量
Fill a vector of pointers with a range-based for loop
这段用向量 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
正确检索元素的地址。
这段用向量 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
正确检索元素的地址。