无法将字符串分配给向量的向量
Posted
技术标签:
【中文标题】无法将字符串分配给向量的向量【英文标题】:Unable to assign strings to a vector of vectors 【发布时间】:2020-03-17 13:47:30 【问题描述】:我正在尝试在散列时用 C++ 编写代码。为此,我试图将字符串推入向量向量中。但它显示了分段错误。
#include <bits/stdc++.h>
using namespace std;
int main()
int n,ind,inr;
cin >> n;
int j=0;
vector<string> a;
vector<vector <string>> v(n);
for(int i=0;i<n;i++)
v.push_back(a);
for(int i=0;i<n;i++)
int m;
string name;
cin>>m;
cin>>name;
ind=m%2039;
v[ind][j]=name;
j=0;
cout<<name<<endl;
【问题讨论】:
问问自己,v
中嵌套向量的大小是多少(或者换一种说法:a
的大小是多少)?
j
总是零???
顺便说一句:***.com/questions/31816095/…
不仅如此,您还会惊讶地发现v
的大小不是n
值,而是两倍。就段错误而言,它们有很多不同的原因,在这里,很难决定从哪里开始。
v.at(ind).at(j)
会很快暴露问题。
【参考方案1】:
对于初学者来说,向量v
的子向量都没有元素。
在此声明中
vector<vector <string>> v(n);
声明了一个带有 n 个空子向量的向量。
然后在这个循环中
for(int i=0;i<n;i++)
v.push_back(a);
您正在向向量 v
追加一个 n 个空子向量。因此,向量v
有 2 * n 个空子向量。
在此声明中
ind=m%2039;
使用了一个幻数2039
。表达式的结果
m%2039
可以大于或等于 2 * n。
所以在这个声明中
v[ind][j]=name;
同时使用这两个索引(尤其是对于向量 v 的空子向量)会导致未定义的行为。
您可以使用标准容器 std::map 声明而不是子向量,例如
std::map<unsigned int, std::vector<std::string>> m;
【讨论】:
以上是关于无法将字符串分配给向量的向量的主要内容,如果未能解决你的问题,请参考以下文章