我在C++中遇到了一个非常奇怪的set迭代器问题.
set<string> dict;
dict.insert("hello");
dict.insert("my");
int maxLen = INT_MIN;
set<string>::iterator itr;
for (itr=dict.begin(); itr!=dict.end(); itr++) {
int len = (*itr).length();
if ( len > maxLen )
maxLen = (*itr).length();
}
Run Code Online (Sandbox Code Playgroud)
这段代码帮助我将maxLen设置为5,这是单词集中最长单词的长度.
set<string> dict;
dict.insert("hello");
dict.insert("my");
int maxLen = INT_MIN;
set<string>::iterator itr;
for (itr=dict.begin(); itr!=dict.end(); itr++) {
if ( (*itr).length() > maxLen )
maxLen = (*itr).length();
}
Run Code Online (Sandbox Code Playgroud)
但是,这段代码无法给我正确的结果.运行代码后,maxLen仍然是INT_MIN的值.基本上没什么变化,除了我不再使用变量来保存(*itr).length()的值.
这对我来说很奇怪.我错过了什么吗?我只想澄清我对迭代器使用的怀疑.
非常感谢!
#include <iostream>
using namespace std;
int main() {
const int a = 2;
const int *p = &a;
int *p2 = const_cast<int*>(p);
*p2=5;
char *p3 = (char *)&a;
cout << "p2 is" << *p2 << endl;
cout << "p2 address " << p2 << endl;
cout << "a is " << a << endl;
cout << "a address " << &a << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
大家好!
根据输出,*p2和a具有不同的值,*p2是5,a是2.
但是,p2和&a是相同的.我糊涂了...
你能帮我理解一下这种情况吗?
非常感谢你!