我是C ++初学者,下面的程序非常简单,但我不知道为什么当输入“EXIT”时,程序终止,虽然它应该打印出之前输入的名字!
这是代码:
#include <iostream>
#include <string>
#include <set>
using namespace std;
int main()
{
set <string> myset;
set <string> :: const_iterator it;
it = myset.begin();
string In;
int i=1;
string exit("EXIT");
cout << "Enter EXIT to print names." << endl;
while(1)
{
cout << "Enter name " << i << ": " ;
cin >> In;
if( In == exit)
break;
myset.insert(In);
In.clear();
i++;
}
while( it != myset.end())
{
cout << *it << " " ;
it ++ ;
}
cout << endl;
}
提前感谢。
答案 0 :(得分:4)
完成插入后,您需要再次确定集合的开头:
it = myset.begin();
应该在第二个while
循环之前。
如果您能够使用C ++ 11功能,请考虑使用基于范围的for循环。请注意,它不需要使用任何迭代器:
for( auto const& value : myset )
std::cout << value << " ";
std::cout << "\n";
如果您无法使用C ++ 11功能,请考虑使用常规for循环。请注意,迭代器的范围仅限于for循环:
for(std::set<std::string>::const_iterator it=myset.begin(), end=myset.end();
it != end; ++it)
std::cout << *it << " ";
std::cout << "\n";
答案 1 :(得分:3)
it = myset.begin();
将此行移至显示名称的循环之前。问题是,如果它在顶部,集合中没有元素,它将获得结束迭代器的值,因此显示循环立即结束。
答案 2 :(得分:0)
it == myset.end();
计算到true
。您需要在循环it = myset.begin();