C++ c+中的传递值+;:当I';我回到主功能了吗?
我正在尝试打印用户从当前地图定义的人口: 我的问题是,当我将iterable返回到主函数时,为什么iterable的值会发生变化C++ c+中的传递值+;:当I';我回到主功能了吗?,c++,stl,iterator,maps,C++,Stl,Iterator,Maps,我正在尝试打印用户从当前地图定义的人口: 我的问题是,当我将iterable返回到主函数时,为什么iterable的值会发生变化 #include <iostream> #include <string> #include <map> std::map<std::string , int> :: iterator get_population(std :: string state , std::map&l
#include <iostream>
#include <string>
#include <map>
std::map<std::string , int> :: iterator get_population(std :: string state , std::map<std::string , int> populationMap)
{
std::map<std::string , int> :: iterator iter;
iter = populationMap.find(state);
// Debug statement
std::cout << "Population is : " << iter -> second;
return iter;
}
int main()
{
std::map<std::string , int> populationMap;
populationMap.insert({{"Mahrashtra" , 124945748 } , {"Uttar Pradesh" , 223897418} , {"Bihar" , 121741741} , {"West Bengal" , 91276115}});
std::string state = "";
std::cout << "Enter the state who's population you want to find : \n";
std::cin >> state;
// defining a new iterable which stores return from get_population
std::map<std::string , int> :: iterator iter;
iter = get_population(state , populationMap);
std::cout << "The current population of " + state + " is : ";
std::cout << iter->second;
}
#包括
#包括
#包括
std::map::迭代器get_填充(std::string state,std::map populationMap)
{
std::map::迭代器iter;
iter=populationMap.find(状态);
//调试语句
std::cout状态;
//定义一个新的iterable,用于存储从get_填充返回的数据
std::map::迭代器iter;
iter=获取人口(州、人口地图);
std::cout您正在通过值将映射传递给get_population
查找发生在映射的副本上,您将向该副本返回一个迭代器(当get\u population
返回时,该迭代器将被销毁)
将代码更改为如下所示:
std::map<std::string , int> :: iterator get_population(std :: string state , const std::map<std::string , int> & populationMap)
std::map::迭代器get_填充(std::string state,const std::map&populationMap)
您通过值传递populationMap
,因此get\u population
中的iter
与populationMap
的本地副本相关联,并在返回时无效。请尝试通过常量引用传递populationMap
。我将尝试一下,谢谢!!但这样对b来说没有意义ihar right?@KhushiRajpal严格地说,由于使用了无效的迭代器,您问题中的代码表现出未定义的行为。在这种情况下,任何事情都可能发生——包括在某些情况下它似乎起作用。