C++ 向量数组还是向量数组?
那么这是创建一个向量类型的数组还是创建一个向量数组?BFS代码似乎遍历了adj[i]的每个实例中的值列表,因此它的工作方式类似于向量数组。 创建向量的语法为: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]中存储一个向量,
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
ofstd::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];
|_________|