在迭代矢量的同时,不在绑定中
out of bound while iterating over vector
我正在制作一个程序,该程序将包含文本和:
- 计算一个单词的数量
- 将它们保存到结构
- 打印出发现了多少次。
,但是当我尝试将字符串与结构字符串成员进行比较时,我遇到了问题。我使矢量超出了范围。请查看下面的代码。希望有人能告诉我我做错了什么
#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);
}
必须为
for(int i = 0; i < word_storage.size();i++)
使用"小于"'&lt;'而不是"小于或等于"'&lt; ='。
几个提示:
using namespace std;
不要在项目中包含整个std
名称空间
void insert(type_of_vector word_storage,string word_to_insert)
word_storage将始终是您在函数调用中放置的内容的副本,如果您不想要副本(并且看起来不喜欢)使用参考type_of_vector& word_storage
。另外,如果不应该更改word_to_insert,则使用const string& word_to_insert
也很有意义。
for(int i = 0;i<=word_storage.size();i++)
您正在迭代范围,使用<
比较而不是<=
this for语句
for(int i = 0;i<=word_storage.size();i++)
给您例外,因为等于szie()的索引无效。索引的有效范围是[0,size() - 1],只要向量不是空。
而不是循环,您可以使用标准算法std :: find_if。例如
void insert(type_of_vector &word_storage, const string &word_to_insert)
{
auto it = std::find_if( word_storage.begin(), word_storage.end(),
[&]( const word_entry &entry ) { return ( entry.word == word_to_insert ); } );
if( it != word_storage.end() )
{
it->amount++;
}
}
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- C++中带有List类的迭代器Segfault
- 迭代时从向量和内存中删除对象
- 如何在c++迭代器类型中包装std::chrono
- 带过滤器的现代迭代c++集合
- 在基于范围的for循环中使用结构化绑定声明
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 迭代从 SWIG 绑定返回的 python 中的 vector<pair<int,int>>
- python+libclang;来回迭代:将字段注释绑定到字段
- 递归到迭代而不重新绑定引用
- 前向迭代器与多个绑定相结合的迭代速度太快
- 在字符串上迭代,但将定界器保持在子字符串中,包括其他规则
- 在迭代矢量的同时,不在绑定中
- 映射/设置迭代器未解除可绑定运行时错误
- 在使用 boost::fusion 迭代时将漂亮的打印机绑定到 boost::p hoenix actor
- 在Release模式(c++)下对迭代器进行绑定检查
- 映射插入迭代器绑定