我正在测试这个代码,它读取stdin并将其存储在vector和stdout中。任何想法可能是什么问题?
#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]#
答案 0 :(得分:4)
在for
循环的初始化部分,您声明了一个类型为vsi
的新变量int
。
解决问题的一种方法:
vsi = vs.begin();
for (int count=1; vsi != vs.end(); ...
答案 1 :(得分:1)
问题出在这一行:
for (int count=1 , vsi = vs.begin(); vsi != vs.end(); vsi++,count++)
您定义了两个int
变量:count
和vsi
。然后,您尝试使用vs.begin()
分配第二个。这就是编译器抱怨的内容。
答案 2 :(得分:0)
问题是vsbegin()不返回int,并且你将vsi声明为整数。
轻松修复:
for (int count=0;count < vs.size(); ++count){
cout << "string" << (count+1) <<"="<< vs[count] << endl;
}
注意:
首选++count
至count++
虽然在这种情况下没有区别,但确实存在这种情况
所以进入是一个好习惯
请参阅:Performance difference between ++iterator and iterator++?
while (!(cin.eof()))
几乎总是错的(在所有语言中)
在阅读完eof之后,'eof flag'才会设置为true
最后一次成功读取读取(但不是过去)eof。因此,您最后一次进入循环并且读取将失败,但您仍然将值推回到向量中。