如何在没有segfaulting的情况下访问向量中的索引

时间:2011-12-20 01:53:48

标签: c++ vector

我知道这很简单,所以我提前道歉。

我试图通过索引访问向量时是segfaulting。例如......

vector<float> some_vec;
int i = 0;

for (some iterator loop here)
{
    //snip
    some_vec[i] = some_float;
    i++;
}

我做错了什么?

4 个答案:

答案 0 :(得分:5)

之后

std::vector<float> some_vec;

你的矢量是空的。你不能访问其中的任何元素,因为没有任何元素。

如果要将值添加到其中,则需要使用push_back()

将它们附加到矢量
for (some iterator loop here)
{
    //snip
    some_vec.push_back(some_float);
    i++;
}

或者,如果您事先知道大小,并且向量中虚拟值的构造是否便宜(就像float和其他内置函数一样),您可以resize()提前矢量

some_vec.resize(42);

或使用适量的元素

创建它
std::vector<float> some_vec(42);

鉴于上述两者中的任何一个,您可以访问向量中的元素0..41

答案 1 :(得分:3)

在向量上调用resize()函数,然后调用push_back()来添加元素。在此之后,您可以使用索引来访问元素。

答案 2 :(得分:1)

我们无法看到的代码中的其他地方可能存在问题,但很可能是因为您没有调用resize()push_back()insert() i不在矢量。使用some_vec.at(i) = some_float;检查i是否在向量的有效范围内。

答案 3 :(得分:1)

我的猜测是你的vector是空的。使用push_back(some_float)向其中添加元素。