将向量定义为向量<int> v(n) 与向量<int> v[n]有什么区别?

  • 本文关键字:向量 int 区别 定义 c++ vector
  • 更新时间 :
  • 英文 :


当我使用这个代码时:

int main()
{
unsigned int n;
cin >> n;
vector<int>number[n];

return 0;
}

编译器将"n"标记为错误:
"表达式必须具有一个常数值">
"变量"n"的值不能用作常数"n";

但当我使用vector<int> v1(n)时,错误消失了,效果很好。

因此,我的问题是:
将向量定义为vector<int> v1(n)vector<int> v2[n]有什么区别
向量是否使用动态分配?

提前感谢

type_name variable_name[array_size];

是默认初始化数组变量的语法。CCD_ 4是n个向量的阵列。如果大小不是编译时常数(例如示例中没有(,则程序格式不正确,您引用的错误就是明证。

type_name variable_name(args);

是用于直接初始化变量的语法。

向量使用动态分配吗?

与大多数标准容器(除std::array外的所有容器(一样,向量元素是动态对象。它使用已经提供给它的分配器来获取存储

两个定义之间的差异

  • vector<int> v1(n)定义了包含n元素的单个向量。

  • vector<int> v2[n]定义了一个可变大小的矢量数组,每个矢量都不包含任何元素。这通常被称为VLA(可变长度数组(,而不是C++的正式组成部分(但它是C99的部分(。一些像gcc这样的编译器也支持它用于c++,但你不应该指望它

std::vector分配

std::vectors将使用所提供的分配器(第二模板自变量std::vector<T,Allocator>(来分配它们的元素。

默认情况下,这将是std::allocator<T>,它将使用new&delete——也就是说,它将在空闲存储中分配(大部分实现为堆(。

不过,如果您想使用其他分配策略(以下是您需要为自定义分配器实现的策略(,则可以提供不同的分配器

最新更新