【问题标题】:C++: Vector subscript out of rangeC++:向量下标超出范围
【发布时间】:2016-05-17 20:17:18
【问题描述】:

我不断收到错误消息:Vector subscript out of range 。我花了一个小时试图找出为什么我一直得到它,这可能是显而易见的,但我看不到它。从试图找出问题所在的反复试验中,我设法将其缩小到第二个 while() 但仍然 。欢迎任何帮助。谢谢。

fstream text("text.txt",ios::in);
vector <char> arr;
vector <int> freq;
char a;
if(!text) 
{
    cout<<"\nError!\n"<<endl;
    return;
}
else
{
    //-------------//initializing first element of each vector
    text>>a;
    arr.push_back(a);
    freq.push_back(1);
    //-----------//
    while(!text.eof())
    {
        text>>a;
        unsigned i=0;
        while(a != arr[i] && i < arr.size())
            i++;
        if(i < arr.size())
        freq[i]++;
        else
        {
            arr.push_back(a);
            freq.push_back(1);
        }
    }}

【问题讨论】:

  • 调试!单步执行您的代码...
  • 我认为您的意思是使用if(i &lt; freq.size()) 而不是if(i &lt; arr.size())。另见:Why is iostream::eof inside a loop condition considered wrong?
  • while(a != arr[i] &amp;&amp; i &lt; arr.size()) i++; -- 当iarr.size() - 1 时,会发生另一个迭代。现在i 等于arr.size(),所以它指向数组的末尾。然后你在a != arr[i] 中使用它——繁荣。在 while 循环中切换这些条件。
  • 嗯,感谢 Dan,这似乎是问题所在,感谢其他人的建议。 :)

标签: c++ vector range out subscript


【解决方案1】:

你应该在while语句中交换条件

while ( i < arr.size() && a != arr[i] ) i++;

这个条件也是错误的

while(!text.eof())
{
    text>>a;

eof 状态可以出现在语句之后

    text>>a;

在这段时间里。

改成

while ( text >> a )

【讨论】:

    【解决方案2】:

    由于此代码块,您正在接收它。 因为一开始 freq 数组的大小是 1 ,所以它的更高索引是 0 ,但是当您通过下标索引 i 访问 freq 中的数据时,它已变为 i++ 即 1 将始终尝试访问 freq[1] 这永远不存在。

    if(i < arr.size())
            freq[i]++;
    

    【讨论】:

      猜你喜欢
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多