我不能动态声明一个向量数组
I cant declare dynamically an array of vectors
我的目的是创建一个邻接表来表示一个图,我选择使用向量来实现。我的问题是图的顶点和边的数量并不总是相同的,它是在输入中给出的。因此我尝试动态声明向量数组。这是我的代码(其中 N 代表边数):
int N;
vector <int> *arr;
arr = new vector <int> [N];
cin >> N;`
每次我尝试处理向量 (ig arr[0].push_back(3);
) 时,我都会遇到分段错误。我做错了什么:(
编辑:N 代表 节点 的数量,而不是边缘的数量。这不会影响分割错误,只会影响用向量表示图形的方式
如果您需要动态 N
您可以使用向量而不是数组:
std::vector<std::vector<int>> arr(N);
arr[42].push_back(42);
还要确保您的 N
变量已初始化,否则您将在 arr
上遇到越界访问,这可能是段错误的原因。
你快到了;但是你正在阅读 N after 使用它。 C++ 程序是逐行执行的,所以当涉及到 new vector <int> [N]
时,值 N
还没有被读取!在 C++ 术语中,您将使用 未初始化的变量 ,它是 undefined behavior 的一种形式。在 C++ 中,与大多数其他语言不同,很容易编写无意义的程序并且编译器不会阻止您(尽管它可能会发出警告 - 请注意这些!)。
如果您将 cin >> N;
移动到 new vector <int> [N]
之前,那么它会更好地工作,但是等等,还有更好的解决方案...
与原始数组不同,使用向量的向量更为惯用。它更安全也更容易:
std::vector<std::vector<int>> arr;
int n;
cin >> n;
arr.resize(n);
或者在 n
已知后简单地声明向量:
int n;
cin >> n;
std::vector<std::vector<int>> arr(n);
我的目的是创建一个邻接表来表示一个图,我选择使用向量来实现。我的问题是图的顶点和边的数量并不总是相同的,它是在输入中给出的。因此我尝试动态声明向量数组。这是我的代码(其中 N 代表边数):
int N;
vector <int> *arr;
arr = new vector <int> [N];
cin >> N;`
每次我尝试处理向量 (ig arr[0].push_back(3);
) 时,我都会遇到分段错误。我做错了什么:(
编辑:N 代表 节点 的数量,而不是边缘的数量。这不会影响分割错误,只会影响用向量表示图形的方式
如果您需要动态 N
您可以使用向量而不是数组:
std::vector<std::vector<int>> arr(N);
arr[42].push_back(42);
还要确保您的 N
变量已初始化,否则您将在 arr
上遇到越界访问,这可能是段错误的原因。
你快到了;但是你正在阅读 N after 使用它。 C++ 程序是逐行执行的,所以当涉及到 new vector <int> [N]
时,值 N
还没有被读取!在 C++ 术语中,您将使用 未初始化的变量 ,它是 undefined behavior 的一种形式。在 C++ 中,与大多数其他语言不同,很容易编写无意义的程序并且编译器不会阻止您(尽管它可能会发出警告 - 请注意这些!)。
如果您将 cin >> N;
移动到 new vector <int> [N]
之前,那么它会更好地工作,但是等等,还有更好的解决方案...
与原始数组不同,使用向量的向量更为惯用。它更安全也更容易:
std::vector<std::vector<int>> arr;
int n;
cin >> n;
arr.resize(n);
或者在 n
已知后简单地声明向量:
int n;
cin >> n;
std::vector<std::vector<int>> arr(n);