C++11 变量在迭代时不打印 我正在为一个个人项目写C++ CSV类,但是遇到了一个奇怪的错误。在我的测试程序中,我有以下代码: for( int i = 0; i < 3; ++i ) { std::cout << i << ": "; std::vector<std::string> results = test.get_row(); for( auto it = results.begin(); it != results.end(); ++it ) { std::cout << *it << " "; } std::cout << std::endl; }

C++11 变量在迭代时不打印 我正在为一个个人项目写C++ CSV类,但是遇到了一个奇怪的错误。在我的测试程序中,我有以下代码: for( int i = 0; i < 3; ++i ) { std::cout << i << ": "; std::vector<std::string> results = test.get_row(); for( auto it = results.begin(); it != results.end(); ++it ) { std::cout << *it << " "; } std::cout << std::endl; },c++11,C++11,但我应该得到: 0: row0 row1 row2 1: blah0 blah1 blah2 2: blah3 blah4 blah5 关于为什么我在前两次运行中没有得到I值,有什么想法吗 注意:我使用的是g++4.4.7。我想我看到了: 您似乎忘记了从输入中删除换行符 这将导致最后一列后面有一个“\r”,并且由于您总是添加一个“”,因此此空格将覆盖最初打印的i 在拆分列值之前将新行字符从输入中删除:)请考虑升级编译器(尽管它与问题无关)。你在Windows上吗?因为我有一半希望windows

但我应该得到:

0: row0 row1 row2
1: blah0 blah1 blah2
2: blah3 blah4 blah5
关于为什么我在前两次运行中没有得到
I
值,有什么想法吗

注意:我使用的是g++4.4.7。我想我看到了:

您似乎忘记了从输入中删除换行符

这将导致最后一列后面有一个“\r”,并且由于您总是添加一个“”,因此此空格将覆盖最初打印的
i


在拆分列值之前将新行字符从输入中删除:)

请考虑升级编译器(尽管它与问题无关)。你在Windows上吗?因为我有一半希望windows“CRLF”行以输入结尾。@sehe:我在CentOS上编译。我还没有升级,虽然我一直想升级。如果
c++11
你可以使用
for(auto I:results){…foo…}
解决这个问题。我从get\u rows函数中删除了“\r”字符。一旦系统允许,我将立即接受。Re。“我在CentOS上编译”:这确实可以解释:如果你有Windows风格的文本文件,CentOS只会去掉UNIX行的结尾(
\n
),在最后一列值中留下“extra”
\r
<代码>\r实际上是回车。如:将(打字机的)回车架放在左边距。完美的解释。
0: row0 row1 row2
1: blah0 blah1 blah2
2: blah3 blah4 blah5