映射迭代器跳转元素
C++ map iterator jump elements
我有一个关于std::map结构的问题:下面的代码片段可以正常工作:
map<string,int> mappa;
int main(int argc, char** argv) {
mappa["b"]=1;
mappa["a"]=2;
for(std::map<string,int>::iterator it=mappa.begin();it!=mappa.end();++it )
{
cout<<it->first<<"n";
}
return 0;
}
输出:a
b
但是如果我这样做了:
map<string,int> mappa;
std::map<string,int> getList(){
return mappa;
}
int main(int argc, char** argv) {
mappa["b"]=1;
mappa["a"]=2;
for(std::map<string,int>::iterator it=getList().begin();it!=getList().end();++it )
{
cout<<it->first<<"n";
}
return 0;
}
我的输出只是
b
为什么?谢谢!
在for循环中,您从mappa的2个独立副本中获取begin()和end(),因为getList()是通过值而不是引用返回的。你需要修改你的getList()函数来通过引用返回。
正常工作的代码:
#include <iostream>
#include <string>
#include <map>
using namespace std;
map<string,int> mappa;
std::map<string,int>& getList() { // returning reference now
return mappa;
}
int main(int argc, char** argv) {
mappa["b"]=1;
mappa["a"]=2;
for(std::map<string,int>::iterator it=getList().begin();it!=getList().end();++it )
{
cout<<it->first<<"n";
}
return 0;
}
您多次呼叫getList
。每次都使用复制构造函数创建一个新的map。
你这样做:
std::map<string,int> myList = getList();
const std::map<string,int>::iterator myListEnd = myList.end();
for(std::map<string,int>::iterator myList.begin();it!=myListEnd;++it )
{
我想你需要一份副本。
getList()返回mappa的副本。您需要将其更改为返回一个引用:
std::map<string,int>& getList()
或者最好是const引用:
const std::map<string,int>& getList()
对于后一种情况,您需要使用const_iterator来遍历映射。
相关文章:
- 对于set上的循环-获取next元素迭代器
- 访问要输出的矢量迭代器元素
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- C++如何乘以包含 std::variant 元素的向量的迭代器?正在执行迭代器类型的转换?
- 调用 erase() 函数是否也会在擦除元素之前更改迭代器值?
- 为什么 min_element() 返回最小元素的索引,而不是迭代器?
- 如何通过查找迭代器结果分配给一组对的元素
- C++:在进行切片时对迭代器的约定,特别是对于访问最后一个元素并最终将其删除
- 将迭代器作为 3 个元素的滑动窗口,可以超调边界(可能使用 Boost)
- C++链表最后一个元素的迭代器?
- 使用索引与迭代器将向量迭代到倒数第二个元素
- 提升堆元素句柄比较和 MSVC 迭代器调试工具
- 如果我有一个指向矢量元素的指针,而不是迭代器,如何删除它?
- 使用迭代器打印矢量元素
- C++ std::vector语言 - 如何修改迭代器指定的元素?
- 你能pop_back一个向量,并且仍然使用迭代器到最后一个元素吗?
- 优先级队列(使用 pairs<int,int> ) 根据 for 循环迭代器的顶级元素
- C++ 当容器在使用前被破坏/修改时发出警告(通过引用元素或迭代器使用)
- 无法将 std::set 中的元素迭代器插入到 std::list
- 使用std :: remove_reference获取STL容器的元素迭代器