C++ 向量数组还是向量数组?

C++ 向量数组还是向量数组?,c++,arrays,vector,C++,Arrays,Vector,那么这是创建一个向量类型的数组还是创建一个向量数组?BFS代码似乎遍历了adj[i]的每个实例中的值列表,因此它的工作方式类似于向量数组。 创建向量的语法为: vector<int> F; 向量F; 这将有效地创建一个一维向量F 两者的区别是什么 vector< vector<int> > N; vectorN; 及 vector<int> F[N] 向量F[N] 向量arr[N]; 它显示一个向量数组,每个数组[i]中存储一个向量,

那么这是创建一个向量类型的数组还是创建一个向量数组?BFS代码似乎遍历了adj[i]的每个实例中的值列表,因此它的工作方式类似于向量数组。 创建向量的语法为:

vector<int> F;
向量F;
这将有效地创建一个一维向量F

两者的区别是什么

vector< vector<int> > N; 
vectorN;

vector<int> F[N]
向量F[N]
向量arr[N];
它显示一个向量数组,每个数组[i]中存储一个向量,可以遍历多个值。它就像一个链表数组,其中头只存储在数组[i]位置


vector<vector<int> > N vs vector<int> F[N]
向量N与向量F[N]
2D向量和向量数组之间的区别在于,2D向量的大小可以跨越,而向量数组的尺寸对于数组大小是固定的。

在引擎盖下,向量仍然使用数组,这是特定于实现的,但可以安全地认为:

vector<int>
向量
在内部创建一个int[]。 向量给你的是,它从你那里抽象出一部分,如果你想重新调整大小,你不需要手动重新分配,它会为你做这件事(当然还有更多)。 当您这样做时:
vector
您将创建一个向量向量向量,即二维矩阵。你可以想窝多少就窝多少。 Vector接受类型T并分配该类型的数组。所以,如果您将vector作为类型T传递,它将有效地执行您在第一行中所做的操作,即
vector
数组。 希望它有意义

那么这(
vector adj[N];
)是创建一个vector类型的数组还是创建一个 阵列向量

它创建向量数组

两者的区别是什么

vector< vector<int> > N; 
vectorN;

vector<int> F[N]
向量F[N] 在第一种情况下,您将创建动态数组的动态数组(向量的向量)。每个向量的大小可以在运行时更改,所有对象都将在堆上分配

在第二种情况下,您将创建一个固定大小的向量数组。您必须在编译时定义
N
,所有向量都将放在堆栈†上,但是,每个向量将在堆上分配元素

我总是更喜欢vector of vectors的大小写(或者矩阵,如果你可以使用第三方库的话),或者
std::array
of
std::array
s的编译时大小写

<>我对C++ STL是新的,而且我理解图表有困难 代表性

vector<int> adj[N];
您还可以将图形表示为
std::unordered_map
,其中
vertex_type
是顶点的类型(
int
)。当边的数量不是很大时,可以使用这种方法来减少内存使用



†:准确地说——不总是在堆栈上——它可能是堆上复杂对象的一部分。此外,C++标准没有定义堆栈或堆的任何需求,它只提供了存储持续时间的要求,例如自动、静态、线程或动态。 它是一个向量数组。
s.

长答案:
阅读声明时,如

vector<int> adj[N];
可以这样解释:

        ____
       |    |
char* str [10];
  |_________|

使
str
成为10个
char*
s的数组

因此,
向量adj[N]是向量数组,而不是数组向量



熟能生巧:

1:什么是
int*foo[]平均值

答复:

“foo”是指向整数的指针数组


2:什么是
int*(*foo[])()平均值

答复:

“foo”是指向返回整数指针的函数的指针数组


3:什么是
int*(*(*foo[])()平均值

答复:

“foo”是指向函数的指针数组,返回指向函数的指针,返回指向整数的指针


向量也是标准C++库容器(也同样是<代码> STD::数组)允许使用迭代器、AlgRythHMS等等,而简单数组只是一个没有包装和好吃的低级数据结构。首先是高级编程,其次是低级编程-实现
std::array
std::vector
使用数组…@SergeBallesta您可以对原始数组使用迭代器和算法,例如使用全局
begin
end
函数。不想挑剔,但
vector F[N]
不一定在堆栈上分配F。它取决于上下文。@MohamadElghawi,你是说自动/动态存储吗?例如:它可以具有静态存储持续时间,甚至可以放置在堆中,如果它位于新对象中。不,在这种情况下它没有任何好处。正如我已经说过的,可以使用它来减少内存使用,因为邻接矩阵占用N^2内存,其中N是顶点数。@TheMatroid,“这不应该影响遍历序列”-只要您填充图形并且不修改它。尝试从右到左读取它。在这种情况下,它成为向量数组。
intx[N]
是一个
int
数组<代码>向量y[N]
是一个向量数组。请记住,对于定义为
T name[N]
的任何数组,都有一个数组,
name
,其中包含
N
类型的
T
元素。另外,当我们讨论数组时,
std::array
是数组的容器,其形式为
T name[N]
,正如
std::vector
是类型为
T
的可变长度数组的容器一样。很抱歉没有发布图片
        ____
       |    |
char* str [10];
  |_________|