向量下标超出范围错误,C ++

时间:2011-03-01 23:10:52

标签: c++ file vector

当我尝试运行此程序时,我收到一个错误,该程序暂停程序并说“向量下标超出范围”

知道我做错了吗?

#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();
}

4 个答案:

答案 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)

你能否附上你在矢量上实际推送字符串的代码版本。除非可以查看重现的代码,否则无法调试该问题。