在矢量上使用push_back<矢量<string>>
Using push_back on a vector<vector<string> >
这样一个简单的问题让我有点尴尬,但在谷歌上搜索了几个小时毫无结果后,我仍然卡住了。
为了简化我的问题,第二行崩溃了:
vector<vector<string> > sorted_words;
sorted_words[0].push_back("hello");
难道sorted_words[0]
不应该是一个空向量,我可以合法地把_push_back放到上面吗?
No。你有一个向量的向量。到第2行,你还没有向两个向量中添加任何东西,所以sorted_words[0]
, sorted_words
中的第一个元素,还不存在。
您正在尝试将"hello"
推入空的vector
。
空指针解引用!
我会问"你真的想要一个向量的向量,还是一个字符串的向量?"
如果你想要一个字符串的向量,那么使用:
vector<string> sorted_words;
sorted_words.push_back("hello");
如果你真的想要一个向量的向量(字符串),那么使用:
vector<string> first_vector;
first_vector.push_back("hello");
sorted_words.push_back(first_vector);
您的对象sorted_words是向量的向量。
vector<vector<string>> sorted_words;
if (sorted_words.empty()) {
sorted_words.resize(1);
}
sorted_words[0].emplace_back("Hello");
一般来说,通过运算符加入一个向量有一个隐含的前提条件,即该向量的大小大于i。
您的sorted_words
没有分配内存。所以sorted_words[0]
会尝试访问一些还不存在的东西。
尝试如下:
vector<vector<string> > sorted_words (100);
sorted_words[0].push_back("Hello");
或者你可以这样做:
vector<vector<string> > sorted_words;
vector<string> innerVec;
innerVec.push_back("Hello");
innerVec.push_back("World");
sorted_words.push_back(innerVec);
您可以在这里查看一个实时示例:http://ideone.com/KlliR8#view_edit_box
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中