【发布时间】:2022-01-13 21:47:06
【问题描述】:
当我使用这段代码时:
int main()
{
unsigned int n;
cin >> n;
vector<int>number[n];
return 0;
}
编译器将“n”标记为错误:
“表达式必须有一个常数值”
"变量'n'的值不能用作常量"
但是当我改用vector<int> v1(n) 时,错误消失并且运行良好。
所以,这是我的问题:
将向量定义为 vector<int> v1(n) 与 vector<int> v2[n] 有什么区别?
向量是否使用动态分配?
提前致谢
【问题讨论】:
-
区别在于一个是向量,一个是向量的数组。
-
另外,因为
n是在运行时动态读入的,所以代码是无效的C++。对于 C 风格的数组,它需要是一个常量(const或constexpr)。 -
术语说明:任何可以改变大小或形状的东西都是动态的。也就是说,C++ 中的任何内容都不会真正改变大小。
vector的大小始终相同。它指向的数组永远不会改变大小。当vector需要一个不同大小的数组时,它会创建一个新数组,将旧数组复制到其中,释放旧数组并指向新数组。大小没有变化,只是被替换了。