我一直在尝试使用一个指针数组指向矢量,我到目前为止已经能够实现这些指针,但是,在尝试将一个元素添加到其中一个子矢量时,我反复得到一个未知数运行时出错。
我之前已将我的数组定义为:
std::vector<std::string> *frequency_table[10000];
然后我尝试将一个元素添加到特定的一个向量中。这是导致运行时错误的行。
frequency_table[index]->push_back(value);
有什么想法吗?
答案 0 :(得分:3)
乍一看,问题看起来似乎没有为指针分配任何内存,因此它无处可将值推送到。虽然没有错误信息我无法确定。
如果是这种情况,则需要使用new
来分配内存
答案 1 :(得分:1)
你的方法涉及混合向量(和向量是一件好事)和对象指针的C风格数组(由于代码中已有向量,因此背叛了混合)。
如果你想要10000个矢量的矢量矢量,那么就写一下
std::vector<std::vector<std::string> > frequency_table(10000);
. . .
frequency_table[index].push_back(value);
第一行声明vector
,其中每个元素都是vector<string>
,为其分配10000个元素并初始化每个元素。
答案 2 :(得分:0)
使用你们的输入,我意识到我的问题是向量没有被初始化,所以我在循环之前添加了这个循环,我填充了向量,现在它可以工作:
for(int i = 0; i < 5000; ++i)
{
frequency_table[i] = new std::vector<std::string>;
}
最终代码如下:
for(int i = 0; i < 5000; ++i)
{
frequency_table[i] = new std::vector<std::string>;
}
for(auto itr = frequency_map.begin(); itr != frequency_map.end(); ++itr)
{
std::string key = itr->first;
double value = itr->second;
frequency_table[(int)value]->push_back(key);
}
全部谢谢!
ps我将10000减半用于测试目的