程序的輸出下面是C++迭代難題
1: foo strlen: 3
2: strlen: 0
3: foo strlen: 3
4: foo strlen: 3
5: strlen: 0
6: strlen: 0
我不明白
- 爲什麼
1
輸出字符串,但2
不和 - 什麼之間的區別三個環是
來源:
#include "stdafx.h"
#include <map>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
map<string, string> m;
m["foo"] = "bar";
const char * s;
for(map<string, string>::iterator it = m.begin(); it != m.end(); it++)
{
pair<string, string> kvPair = *it;
s = kvPair.first.c_str();
printf("1: %s strlen: %d\n", s, strlen(s));
break;
}
printf("2: %s strlen: %d\n", s, strlen(s));
for(map<string, string>::iterator it = m.begin(); it != m.end(); it++)
{
s = (*it).first.c_str();
printf("3: %s strlen: %d\n", s, strlen(s));
break;
}
printf("4: %s strlen: %d\n", s, strlen(s));
for(map<string, string>::iterator it = m.begin(); it != m.end(); it++)
{
s = ((pair<string, string>) (*it)).first.c_str();
printf("5: %s strlen: %d\n", s, strlen(s));
break;
}
printf("6: %s strlen: %d\n", s, strlen(s));
return 0;
}
更新與小C程序員的解釋++背景,將不勝感激。
Nitpick>:「stdafx.h」,缺少,缺少'std ::'。 ;-) –
DevSolar
2012-07-12 06:25:13
是不是'kvPair.first.c_str()'臨時? – DevSolar 2012-07-12 06:26:50
就像它來自的「kvPair」一樣。 – 2012-07-12 06:27:43