0

我正在测试这段代码,它读取标准输入并将其存储在向量和标准输出中。知道问题可能是什么吗?

#include <iostream>
#include <vector>
#include <string>


using namespace std;

int main() {
  vector<string> vs;
  vector<string>::iterator vsi;

  string buffer;
  while (!(cin.eof())) {
    getline(cin, buffer);
    cout << buffer << endl;
    vs.push_back(buffer);
  };

  for (int count=1 , vsi = vs.begin(); vsi != vs.end(); vsi++,count++){
    cout << "string" << count <<"="<< *vsi << endl;
  }

  return 0;
}



[root@server dev]# g++ -o newcode newcode.cpp 
newcode.cpp: In function ‘int main()’:
newcode.cpp:19: error: cannot convert ‘__gnu_cxx::__normal_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >’ to ‘int’ in initialization
newcode.cpp:19: error: no match for ‘operator!=’ in ‘vsi != vs.std::vector<_Tp, _Alloc>::end [with _Tp = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Alloc = std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >]()’
newcode.cpp:20: error: invalid type argument of ‘unary *’
[root@server dev]# 
4

3 回答 3

4

for循环的初始化部分,您声明了一个vsi类型为的新变量int

解决问题的一种方法:

vsi = vs.begin();
for (int count=1; vsi != vs.end(); ...
于 2012-10-17T12:35:57.937 回答
1

问题出在这一行:

for (int count=1 , vsi = vs.begin(); vsi != vs.end(); vsi++,count++)

您定义了两个int变量:countvsi。然后,您尝试将第二个分配给vs.begin(). 这就是编译器所抱怨的。

于 2012-10-17T12:37:23.477 回答
0

问题是 vs.begin() 不返回 int,并且您将 vsi 声明为整数。

轻松修复:

for (int count=0;count < vs.size(); ++count){
  cout << "string" << (count+1) <<"="<< vs[count] << endl;
}

笔记:

  • 更喜欢 虽然在这种情况下没有区别,但在某些情况下确实如此++count。 所以养成一个好习惯。 请参阅:++iterator 和 iterator++ 之间的性能差异?count++


  • while (!(cin.eof()))实际上总是错误的(在所有语言中)。
    'eof flag' 直到你读完 eof 之后才设置为 true。
    最后一次成功读取读取到(但不超过)eof。所以你最后一次进入循环,读取将失败,但你仍然将一个值推回向量中。

    • 在某些情况下,这可能会导致无限循环。
      如果读取时出现另一种类型的失败,您将永远无法到达 eof
      (例如 cin >> x;如果输入不是整数,其中 x 是 int 可能会失败)
      请参阅:c++ reading undefined number of lines with eof()
于 2012-10-17T13:13:24.473 回答