向量数组或数组向量?

the*_*ids 42 c++ arrays vector

我是C++ STL的新手,我无法理解图形表示.

vector<int> adj[N];
Run Code Online (Sandbox Code Playgroud)

那么这会创建一个类型向量数组,还是会创建一个数组向量?BFS代码似乎遍历在adj [i]的每个实例处出现的值列表,因此它看起来像一个向量数组.创建向量的语法是:

vector<int> F;
Run Code Online (Sandbox Code Playgroud)

这将有效地创建单维向量F.

有什么区别

vector< vector<int> > N; 
Run Code Online (Sandbox Code Playgroud)

vector<int> F[N]
Run Code Online (Sandbox Code Playgroud)

awe*_*oon 46

那么this(vector<int> adj[N];)创建一个类型为vector的数组还是创建一个数组向量?

它创建了矢量数组

有什么区别

vector< vector<int> > N; 
Run Code Online (Sandbox Code Playgroud)

vector<int> F[N]
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,您将创建动态数组的动态数组(向量矢量).每个向量的大小可以在运行时更改,所有对象都将在堆上分配.

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

我总是喜欢矢量情况下的矢量(或矩阵,如果你可以使用第三方库),或std::arraystd::arrayS IN编译时尺寸的情况下.

我是C++ STL的新手,我无法理解图形表示.

您也可以将图形表示为a std::unordered_map<vertex_type,std::unordered_set<vertex_type>>,其中vertex_type是顶点的类型(int在您的情况下).当边数不是很大时,可以使用这种方法来减少内存使用.


:准确地说 - 并不总是在堆栈上 - 它可能是堆上复杂对象的一部分.此外,C++标准没有定义堆栈或堆的任何要求,它仅提供存储持续时间的要求,例如自动,静态,线程或动态.

  • 不想挑剔,但`vector <int> F [N]`不一定在堆栈上分配F. 这取决于具体情况. (3认同)

Che*_*ide 18

简答:
这是一系列vector <int>的.

长答案:
阅读声明如

vector<int> adj[N];
Run Code Online (Sandbox Code Playgroud)

编译器使用称为"螺旋 - ""顺时针规则"的方法来解释它的含义.螺旋规则背后的想法是你从变量名开始,然后以顺时针螺旋向外移动,以便找出它是什么类型的变量.例如:

char* str [10];
Run Code Online (Sandbox Code Playgroud)

可以解释如下:

        ____
       |    |
char* str [10];
  |_________|
Run Code Online (Sandbox Code Playgroud)


制作str一个10 char*秒的数组.

因此,vector<int> adj[N];是一个向量数组而不是数组向量



实践完美:

1:什么int * foo [ ];意思?

回答:

"foo"是指向整数的指针数组


2:什么int * (*foo [ ] )();意思?

回答:

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


3:什么int * (*(*foo [ ] )())();意思?

回答:

"foo"是一个指向函数的指针数组,返回指向函数的指针,返回指向整数的指针

  • ^没关系,我添加了图形. (2认同)

小智 8

vector<int> arr[N];
Run Code Online (Sandbox Code Playgroud)

它显示一个向量数组,每个数组[i]都有一个存储在其中的向量,可以遍历许多值.它就像一个链接列表数组,其中磁头只存储在array [i]位置.


vector<vector<int> > N vs vector<int> F[N]
Run Code Online (Sandbox Code Playgroud)

2D矢量和矢量数组之间的区别在于2D矢量可以跨越大小,而矢量数组的尺寸固定为数组大小.


Mar*_*ano 5

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

vector<int>
Run Code Online (Sandbox Code Playgroud)

在内部创建一个int [].什么向量给你的是它从你那里抽象的部分,如果你想重新调整大小,你不必手动重新分配等,它会为你做(当然还有更多).当你这样做:vector<vector<int>>你将创建一个向量矢量,意味着一个2D矩阵.您可以根据需要嵌套它.Vector接受类型T并分配该类型的数组.因此,如果您将向量作为类型T传递,它将有效地执行您在第一行中所执行的操作,即数组vector<int>.希望它有意义