当我尝试运行此程序时,我收到一个错误,该程序暂停程序并说“向量下标超出范围”
知道我做错了吗?
#include <vector>
#include <string>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <sstream>
using namespace std;
//(int argc, char* argv[]
int main()
{
fstream bookread("test.txt");
vector<string> words;
bookread.open("test.txt");
if(bookread.is_open()){
cout << "opening textfile";
while(bookread.good()){
string input;
//getline(bookread, input);
bookread>>input;
//string cleanedWord=preprocess(input);
//char first=cleanedWord[0];
//if(first<=*/
//cout << "getting words";
//getWords(words, input);
}
}
cout << "all done";
words[0];
getchar();
}
答案 0 :(得分:8)
你永远不会在单词vector
中插入任何内容,因此行words[0];
是非法的,因为它访问了它的第一个元素,它不存在。
答案 1 :(得分:2)
我看不到你在向量上推动任何东西。如果向量为空,则下标0将超出范围。
答案 2 :(得分:0)
您的程序似乎永远无法向向量添加任何内容,通常使用push_back()
,因此在运行时words[0]
会产生subscript out of range
错误。
在访问之前,您应该检查矢量的大小。
试试这个:
for(vector<string>::const_iterator it=words.begin(), end=words.end(); it!=end; ++it){
cout << *it << ' ';
}
答案 3 :(得分:0)
你能否附上你在矢量上实际推送字符串的代码版本。除非可以查看重现的代码,否则无法调试该问题。