2D向量的C ++语法

时间:2017-07-05 22:48:18

标签: c++ stl

有人可以通过示例解释下面的c ++语法吗?

vector <vector <int> > s(n,vector <int> ());

特别是构造函数中的这部分:

vector <int> ()

3 个答案:

答案 0 :(得分:5)

这个vector的特定构造函数有两个参数:

  1. 元素数量。
  2. 要分配给每个元素的值。
  3. 例如,这会创建一个包含值5的3倍的向量。

    std::vector<int> vec(3, 5);
    

    vector<int>()vector<int>的默认构造实例。所以你要创建一个包含n个向量的向量,每个向量都是空的。

答案 1 :(得分:0)

#include <vector>
using namespace std;

int main() 
{
    int N = 10;
    std::vector< std::vector<int> vector2DA(N, std::vector< int>(N));
    return 0;

}

此代码创建vector2D 10x10,第一个参数构造函数是大小基本向量(vector2DA(size,objectWhichIsContain)),其中包含其他向量,其大小为10(std::vector< int>(size))。我们有vector2D 10x10。

答案 2 :(得分:0)

首先,vector的{​​{1}}不完全是“2D矢量”。 vector的“行”在内存布局和语义方面完全独立。有更好的选择,例如Boost.Multi_array

然后我们有vector<vector<>>。根据上下文,这可能意味着临时对象初始化或函数声明。有问题的例子实际上没有提供足够的背景:

vector <int> ()

如果vector <vector <int> > s(n,vector <int> ()); 恰好是类型名称,则此行是函数声明。当然n可能是n,但最好明确声明你想要一个默认构造的int作为第二个参数:

vector<int>

此处vector <vector <int> > s(n,vector <int> {}); 明确指的是vector <int> {} 类型的默认构造临时对象,并将其作为值传递给vector<int>构造函数使用初始化行。

这给我们带来了另一个观察:vector<vector<int>> 默认值初始化其元素,这意味着可以实现相同的结果:

std::vector

最后,原始语句中vector <vector <int> > s(n); 的出现提示它可能是为了设置2D向量的“宽度”:

vector<int>()

vector <vector <int> > s(n,vector <int> (m)); 在某处失去了一段时间:)