bas*_*r_p 3 c++ size dictionary loops
我有以下程序,可以找到数字的频率.
map<int,int> mp;
vector<int> x(4);
x[0] = x[2] = x[3] = 6;
x[1] = 8;
for(int i=0;i<x.size();++i)
mp[x[i]]++;
cout<<"size:"<<mp.size()<<endl; //Prints 2 as expected
for(int i=0;i<mp.size();++i) //iterates from 0->8 inclusive
cout<<i<<":"<<mp[i]<<endl;
Run Code Online (Sandbox Code Playgroud)
输出如下:
size:2
0:0
1:0
2:0
3:0
4:0
5:0
6:3
7:0
8:1
Run Code Online (Sandbox Code Playgroud)
为什么迭代次数超过9次?我也尝试在插入元素时使用insert而不是[]运算符,但结果是一样的.我还使用迭代器迭代地图进行测试.
在打印循环之前,填充的mp元素是[6]和[8].当您调用cout ... << mp[i]print with时i 0,它会插入一个[0]具有默认值的新元素0,返回对该元素的引用然后被打印,然后您的循环测试i < mp.size()实际上与新的大小进行比较3.其他迭代添加了更多元素.
你应该这样做:
for (std::map<int,int>::const_iterator i = std::begin(mp);
i != std::end(mp); ++i)
std::cout << i->first << ':' << i->second << '\n';
Run Code Online (Sandbox Code Playgroud)
...或者,对于C++ 11 ......
for (auto& e : mp)
std::cout << e.first << ':' << e.second << '\n';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |