2-d向量的不同符号之间的区别?

时间:2016-05-24 20:15:33

标签: c++ vector

我正在玩矢量并偶然发现不同类型的二维矢量。有人请指出这些矢量声明之间的主要区别。

其中哪一个实际上是二维矢量 -

//c++ format
//All libraries preincluded
 1) std::vector <int,int> v1;
 2) std::vector <pair<int,int>> v2;
 3) std::vector <int> v(10);
 4) struct node{
       int a,b;
     }
     std::vector<node> v4;
 5) std::vector< vector<int> > v5;

3 个答案:

答案 0 :(得分:0)

答案不是以上所述。

没有2D vector这样的东西。所有vectors都是1D,但可能包含具有其他维度外观的对象。

考虑选项5.这是vector,其中包含其他vector,当使用时肯定可以看到2D。外部vector提供一个维度,而包含vector s提供另一个维度。但它不是2D vector。它是vector的{​​{1}}。

vectors

语法无效。这指定分配器为std::vector <int,int> v1; 类型,并可能导致几页奇怪的错误消息。

int

将提供N x 2矩阵,但访问这些对是很麻烦的std::vector <pair<int,int>> v2; ?呸。

v2[n].first

这是一维矢量,但如果您愿意自己做数学运算,可以将其视为5x2矩阵:std::vector <int> v(10);

v[row*2+column]

几乎与选项2完全相同。struct node{ int a,b; } std::vector<node> v4; 不错,但可能更好。

v4[n].a

以上涵盖。这具有优点,但允许非矩形形状并且具有可怕的高速缓存性能,因为许多std::vector< vector<int> > v5; 中的每一个都是它自己的拥有自己内存的野兽,并且该内存可能分散在整个存储中。阅读空间局部性,看看为什么这很糟糕。

我选择选项6

vector

这是所有连续存储,看起来像一个N x 2矩阵:std::vector<int[2]> v6;

答案 1 :(得分:0)

  

std::vector<int,int> v1

这是非法语法,std::vector只保存单一类型的数据 - 第二个模板参数可用于自定义分配器对象。

  

std::vector<std::pair<int,int>> v2

这声明了std::vector,其中包含std::pair<int,int>类型的对象,以便向量的每个元素在对结构中保存两个整数。

  

std::vector<int> v(10)

构造std::vectorint类型,其中包含10个默认插入的int实例。

  

std::vector<node> v4

声明std::vector持有node类型的对象,其中node在您的问题中定义。每个节点都有两个公共int字段,因此其行为与std::vector<std::pair<int,int>>类似。

  

std::vector< std::vector<int> > v5

这声明了std::vectorstd::vector<int>个对象,v5是&#34; 2d向量&#34; (我松散地使用该术语,从技术上讲它并非真正的2d) - 即v5的每个元素都包含std::vector<int>个对象。

答案 2 :(得分:-1)

  1. 非法?

  2. N by 2 vectors

  3. 1D向量(10个元素的预留空间)
  4. N by 2 vectors
  5. 矢量矢量。可以是N乘M,甚至是不规则形状。
  6. 2)4)5)以不同方式访问细胞。假设您要访问第x行,第y列的单元格:

    • 2)y == 0:v2 [x] .first; y == 1 v2 [x] .second

    • 4)y == 0:v4 [x] .a; y == 1 v4 [x] .b

    • 5)v5 [x] [y]