这个问题在这里已有答案:
我正在尝试编写一个代码,将数据推回到向量的向量中,但是当我尝试在循环中执行此操作时,我一直遇到分段错误。
我尝试了以下内容。我有两个循环,一个计数到5,另一个计数到第一个循环的位置。我正在尝试用C ++创建一个可变大小的2d向量。我的目标是每个子向量都有不同的大小。
#include <vector>
#include <stdio.h>
#include <iostream>
using namespace std;
int main(){
vector<vector<int>> v;
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < i; ++i)
{
v[i].push_back(j);
}
}
}
当我尝试推回时,我得到分段错误。我究竟做错了什么?
提前谢谢蒂亚戈
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);
}
}
在向嵌套向量添加元素之前,需要向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);
}
}