'vector <double> hour {vector <double>(24,-1)};'是什么?意思?

时间:2019-02-06 03:28:12

标签: c++ vector

这是一个24个向量都初始化为'-1'的向量吗?如果是这样,那为什么不将类型为“ vector”的小时向量而不是“ double”呢?

我无法想象这种形式的数据结构。

4 个答案:

答案 0 :(得分:1)

vector<double> hour { vector<double>(24, -1) };

这将导致一个名为hour的单个24 -1s向量。 vector<double>(24, -1)内的{}是为创建hour向量而创建的临时向量。

视觉上,省略了“ .0”:

{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}
  

如果是这样,那为什么不将类型为“ vector”的小时向量而不是“ double”呢?

小时向量的类型为vector<double>。<>用于模板,并在编译时确定向量将包含的类型。

如果它说的是vector<int> hour,那么它就是int值而不是double值的向量。

答案 1 :(得分:1)

根据cppreference page,这是构造函数形式

vector(size_type count,
       const T& value,
       const Allocator& alloc = Allocator());
// Constructs the container with <count> copies of elements, each with value <value>.

使用默认分配器。

因此,它构造了一个大小为24的向量,该向量的每个元素都设置为-1

hour的类型既不是double也不是{em> vector,它是vector<double>,令人惊讶地是双精度的向量:- )

答案 2 :(得分:0)

首先要构造一个double型向量的实例,该实例具有以-1.0(隐式)初始化的24个项目,然后将其复制以创建一个新的double型小时向量。

更新: 现代编译器将具有针对该操作使用移动语义的优化,并且不会进行深度复制。

更好的方法是vector<double> hour(24, -1);

答案 3 :(得分:0)

vector<double>(24, -1)创建一个大小为24的向量,并将每个值初始化为-1vector <double> hour{vector<double>(24, -1)}使用副本构造函数复制此向量,因此它也以24 -1 s结尾。

{-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0}