在循环中将向量推回向量时出现段错误

时间:2019-05-01 19:25:07

标签: c++

我正在尝试编写将数据推回到向量vector中的代码,但是当我尝试在循环中执行此操作时,我总是遇到分段错误。

我尝试了以下方法。我有两个循环,一个循环计数到5,另一个循环计数到第一个循环的位置。我正在尝试尝试在C ++中创建可变大小的2d向量。我的目标是每个子向量都有不同的大小。

for i in range(no_of_rows):
    # Here Adj is the 2D matrix 
    contains = np.argwhere(np.all(Adj[i] >= Adj, axis = 1))

当我尝试推回时,出现分段错误。我在做什么错了?

提前感谢,蒂亚戈

2 个答案:

答案 0 :(得分:5)

您需要先向vector<int>添加v,然后才能将元素添加到嵌套向量。

此外,您在内部循环中有一个错字。您正在使用++i而不是++j

for (int i = 0; i < 5; ++i)
{
    v.push_back(std::vector<int>());
    for (int j = 0; j < i; ++j)
    {
        v[i].push_back(j);
    }
}

另一种方法是在外部循环之前调整v的大小。

int size = 5;
v.resize(size);
for (int i = 0; i < size; ++i)
{
    for (int j = 0; j < i; ++j)
    {
        v[i].push_back(j);
    }
}

答案 1 :(得分:4)

v中没有元素,因此尝试通过v[i]对其进行索引会给您带来段错误,因为它的未定义行为会为不存在的元素建立索引。

尝试在每次迭代中添加向量:

for (int i = 0; i < 5; ++i)
{
    v.push_back(std::vector<int>{});
    for (int j = 0; j < i; ++j)
    {
        v[i].push_back(j);
    }
}