从C ++中的指针数组向向量添加元素

时间:2016-05-13 04:23:09

标签: c++ arrays vector

我一直在尝试使用一个指针数组指向矢量,我到目前为止已经能够实现这些指针,但是,在尝试将一个元素添加到其中一个子矢量时,我反复得到一个未知数运行时出错。

我之前已将我的数组定义为:

std::vector<std::string> *frequency_table[10000];

然后我尝试将一个元素添加到特定的一个向量中。这是导致运行时错误的行。

frequency_table[index]->push_back(value);

有什么想法吗?

3 个答案:

答案 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减半用于测试目的