c++ - 在 vector 上迭代时越界

原文 标签 c++ vector indexoutofboundsexception

我正在制作一个程序,将文本和:

  • 计数找到一个单词的次数
  • 将它们保存到结构
  • 打印出找到单词的次数。

  • 但是,当我尝试将字符串与结构字符串成员进行比较时,我遇到了问题。
    我的向量超出范围。请查看下面的代码。希望有人可以告诉我我在做什么错
    #include <iostream>
    #include<string>
    #include <vector>
    
    using namespace std;
    
    
    struct word_entry {
      string word;
      int amount;
    } ;
    
    typedef vector<word_entry>  type_of_vector;
    
    void insert(type_of_vector word_storage,string word_to_insert)
    {
      bool word_found =false;
    
      for(int i = 0;i<=word_storage.size();i++)
        {
          if(word_storage.at(i).word==word_to_insert) //crashes the program
            {
              word_storage.at(i).amount++; 
               word_found=true;
            } 
        }    
    }
    
    int main()
     {
       type_of_vector word_vector;
       string word_to_insert="kalle";   
       word_entry insert_word={word_to_insert,1};  
       word_vector.insert(word_vector.end(),insert_word);   
       insert(word_vector,word_to_insert); 
     }
    

    最佳答案

    一些提示:

    using namespace std;
    

    不要在项目中包含整个std命名空间
    void insert(type_of_vector word_storage,string word_to_insert)
    

    如果您不希望复制副本(看起来像您不愿意),请使用type_of_vector& word_storage,word_storage将始终是您在函数调用中放置的副本。如果不应该更改word_to_insert,那么也可以使用const string& word_to_insert
    for(int i = 0;i<=word_storage.size();i++)
    

    您要越界访问,请使用< compare而不是<=

    相关文章:

    c++ - 如何从stringstream中跳过空格和换行符并将它们放入 vector 中?

    c++ - sizeof(void())是合法表达式吗?

    c++ - vector unordered_map,在 map 中搜索太慢

    android - IndexOutOfBoundsException:获取菜单项(溢出图标)项的标题时

    java - 添加新的jpanel后,IndexOutOfBound异常

    c++ - QTemporaryFile为空

    c++ - LevelDB TEST_方法的前缀

    c++ - 存储指针 vector 的最佳C++ 11方法

    c++ - 字符数组 vector 的C++ GCC 4.3.2错误

    java - 遗传算法-Java Crossover