【发布时间】:2021-12-28 02:44:31
【问题描述】:
#include<bits/stdc++.h>
#include<vector>
using namespace std;
int main(){
int n=5;
vector<vector<int>> v;
v[0][0]=1;
v[1][0]=1;
v[1][1]=1;
cout<<2; //not getting output 2
}
在上面的代码中,我试图创建一个动态二维数组,但问题是我没有收到任何错误,但数字 2 也没有打印出来。可能是什么原因?
【问题讨论】:
-
#include<bits/stdc++.h>和#include<vector>的存在表明您不知道如何使用 bits/stdc++.h。 Here's a bit of reading to help you out with that。 TL;DR 版本:它是一个实现帮助文件。不要直接包含它。 -
Vector-of-vector 对于“动态 2D 数组”来说是一个糟糕的选择,如果您在谈论传统意义上的 2D 数组(每行具有相同的列数)。如果那是您想要做的,请立即停止。您最好分配一个大小为
width * height的向量,将其封装在一个类中,并使用运算符重载来提供二维索引。 -
@paddy 我不会说永远不会。当然适用于生产或性能关键代码。但是对于具有数十甚至数百个元素的玩具示例或类分配,我认为没有必要使用扁平数组使代码复杂化,特别是因为 C++ 没有任何本机功能。
-
这是一个公平的选择。我的动机是阻止养成坏习惯。 vector-of-vector 的语义意味着可以并且很可能将具有不同长度的行。所以这是一个合适的结构,或者正如你所说的一次性玩具示例。编译器将原生 2D 数组作为平面处理,随机访问索引在内部为
row * ncols + col。为了模拟这一点,可以用basic wrapper 做同样的事情。当然,它不仅仅是一个玩具,但也只是多一点而已。它也更适合常见的数组使用模式。