向量数组或数组向量?

时间:2016-02-19 09:12:28

标签: c++ arrays vector

我是C ++ STL的新手,我在理解图表表示时遇到了麻烦。

vector<int> adj[N];

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

vector<int> F;

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

之间有什么区别
vector< vector<int> > N; 

vector<int> F[N]

4 个答案:

答案 0 :(得分:39)

  

这样做(vector<int> adj[N];)创建一个类型为vector的数组,或者这会创建一个   数组向量?

它创建了矢量数组

  

之间有什么区别
vector< vector<int> > N; 
     

vector<int> F[N]

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

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

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

  

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

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

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

答案 1 :(得分:14)

简答:
它是vector <int> s的数组。

长答案:
在阅读诸如

之类的声明时
vector<int> adj[N];

编译器使用一种称为&#34;螺旋 - &#34; &#34;顺时针规则&#34; 的方法来解释这是什么意思。螺旋规则背后的想法是你从变量名开始,然后以顺时针螺旋向外移动,以便找出它是什么类型的变量。例如:

char* str [10];

可以这样解释:

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


str数组设为10 char* s。

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



练习变得完美:

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

答案:

  

&#34; foo&#34;是一个指向整数的指针数组


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

答案:

  

&#34; foo&#34;是指向函数的指针数组,返回指向整数的指针


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

答案:

  

&#34; foo&#34;是一个指向函数的指针数组,返回指向函数的指针,返回指向整数的指针

答案 2 :(得分:8)


sudo find . -type d -exec chmod 770 {} \; && sudo find . -type f -exec chmod 660 {} \;  && sudo chmod u+x bin/magento
sudo chown -R $(whoami):www-data .

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


<input type="number" name="nome" value="0">

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

答案 3 :(得分:5)

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

vector<int>

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