【发布时间】:2020-09-27 17:53:29
【问题描述】:
我希望得到一个指向映射的值元素(结构)的指针,并将这个指针保存在一个向量中。
第二个例子有什么问题?
示例 1(编译但语义错误)
vector<Tstruct*> myvector {};
for (const map<int, Tstruct> &kv : mymap) {
auto y = kv.second; // a copy
myvector.push_back(&y); // ok! &y is a Tstruct*, but this is a pointer to a copy
}
示例 2(未编译但旨在显示预期语义)
vector<Tstruct*> myvector {};
for (const map<int, Tstruct> &kv : mymap) {
myvector.push_back(&kv.second); // &kv.second is not a valid argument here (why?)
}
我意识到这一定是一个新手问题,但四处搜索却无法弄清楚;我理解“X 的引用地址”=“X 的地址”,所以这似乎有点奇怪。
【问题讨论】:
-
for (const map<int, Tstruct> &kv : mymap)这是正确的代码吗?是地图的地图吗?请创建一个minimal reproducible example - 包括编译器错误。 -
如果
&kv.second不适合myvector,按理说你应该显示myvector是什么。您的所有答案都必须在这些信息中找到。也就是说,如果您创建minimal reproducible example,那么您很有可能会看到并能够自己解决问题。在尚未构建 MRE 的情况下提出问题通常是在浪费您的时间。 -
#Quimby 它改编自一个更复杂的示例,该示例使用 auto 而不是
map<int, Tstruct>,它最初的读法类似于for (const auto &kv : mymap) { myvector.push_back(&kv.second); }
标签: c++ for-loop pointers reference