我是C++的新手。我无法将数据输出到文件。我正在使用迭代器打印出 map 。打印方法采用键值i,然后打印出其对应的 vector 。现在,当我正常使用cout <这是发生错误的我的打印方法:
public: void print(int i, vector<string> in, ostream& outfile) // print method for printing a vector and it's key
{
sort(in.begin(), in.end()); // sort the vector alphabetically first
vector<string>::iterator it;
it= unique(in.begin(), in.end()); // makes sure there are no duplicate strings
in.resize( distance(in.begin(),it) );
for( it = in.begin(); it != in.end(); it++ ) // iterate through it
cout << i << ": "<< *it<<endl; // and print out the key value and each string in the vector
// outfile<< i << ":" << *it<< endl; // prints to file
}
最佳答案
您是否同时使用cout
行?如果是这样,我想我知道这是什么。
不带括号的for
循环将执行下一条语句作为其循环体。如果同时使用cout
行和outfile
行,则将打印所有内容,然后在循环之后,it
将位于数组末尾。然后,您尝试取消引用并将其写入文件,由于您取消引用了无效的迭代器,因此当然会失败。
简短的答案,用大括号将语句包装在for循环中。
例如,您具有以下内容(正确缩进时):
for( it = in.begin(); it != in.end(); it++ ) // iterate through it
cout << i << ": "<< *it<<endl;
outfile<< i << ":" << *it<< endl; // prints to file
最后一行是
it = in.end()
,其中in.end()
是刚好在 vector 结尾之后的元素。然后,您尝试在不存在(且无效)的位置访问元素,因此失败。相反,您需要将其移动到循环中,该循环应显示为for( it = in.begin(); it != in.end(); it++ ) // iterate through it
{
cout << i << ": "<< *it<<endl; // and print out the key value and each string in the vector
outfile<< i << ":" << *it<< endl; // prints to file
}