如何在矢量中访问索引而不进行分段

How to access an index in a vector without segfaulting

本文关键字:分段 索引 访问      更新时间:2023-10-16

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

当尝试通过索引访问向量时,我正在分割。例如…

vector<float> some_vec;
int i = 0;
for (some iterator loop here)
{
    //snip
    some_vec[i] = some_float;
    i++;
}

我做错了什么?

After

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

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

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

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