C++:为什么取消引用这个向量迭代器会出错
C++: Why does dereferencing this vector iterator segfault?
void insert_string( std::vector<std::string> & strings, const std::string &s )
{
std::vector<std::string>::iterator it=lower_bound(strings.begin(),strings.end(),s);
if(strings.size()>0) std::cout<<*it<<" is foundn"; // ****
strings.insert(it,s);
}
尝试使用此功能时,第一次插入正常。第二次插入将输出"找到 [第一个字符串]",然后输出段错误。如果我注释掉 if/cout 行,我可以反复调用并且不会发生段错误。
我也尝试过做一些类似std::string tmp=*it;
的事情,然后它会在该行上出现段错误。虽然打印没什么大不了的,但我真正想做的是检查lower_bound找到的位置的字符串是否与尝试插入的字符串相同(即if(*it==s)
,就像上面的两个例子一样是分段错误(。
我在这里错过了什么?
谢谢!
检查条件,如果it == strings.end()
,如果是,请不要打印。这可能会导致问题。您确定要检查的字符串在字符串向量中吗?
相关文章:
- std::向量迭代器和调整大小/保留的奇怪/有趣行为
- 如何取消引用向量迭代器
- Map中的(字符串的)向量迭代器
- C++将向量迭代器转换为索引
- 无法取消引用超出范围的向量迭代器 - 有什么问题?
- 向量迭代器不兼容的错误,用于保存另一个向量的迭代器的向量
- C++向量迭代器nth_element编译错误
- 无法查找值初始化的向量迭代器?
- STD ::向量迭代器类型和允许的操作
- 向量迭代器 < 或 !=
- 向量迭代器在新对象的 push_back() 之后不兼容
- 向量迭代器对于包装器类不可取消引用(没有超出 end() 取消引用)
- C++向量迭代器不是增量的
- 使用向量迭代器的合并矢量
- 向量迭代器不可递增
- 向量迭代器进行循环
- 向量迭代器与c++不兼容
- 向量迭代器不可解引用C++
- C++将向量迭代器与实例进行比较
- 编译错误 ::向量 ::迭代器