Avi*_*iss 1 c++ for-loop ranged-loops
这个用向量元素的地址填充指针向量的代码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;
}
Run Code Online (Sandbox Code Playgroud)
如何使用基于范围的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;
}
Run Code Online (Sandbox Code Playgroud)
我确信我有一些非常简单的错误 - 但是在搜索了一下之后却无法解决这个问题.感谢大家!
小智 5
参考元素:
for (auto& r : v)
pv.push_back(&r);
Run Code Online (Sandbox Code Playgroud)
您原始的基于范围的for循环按值迭代向量,使i每个项目成为每个项目的新副本.因此表达式&i不检索内部元素的地址v.
通过引用迭代,每个r引用内部的元素v,因此表达式&r的地址正确地检索元素的地址.
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |