gpt4 book ai didi

c++ - 为什么没有大小声明的 vector 需要 push_back 来接受带有 cin 的输入?

转载 作者:太空狗 更新时间:2023-10-29 20:10:37 26 4
gpt4 key购买 nike

为什么声明大小的 vector 可以像这样直接从 cin 接受输入:

int n;
cin>>n;
vector<int> a(n);//Vector declared with size
for(int i=0;i<n;i++)
cin>>a[i];

但是没有大小声明的 vector 需要一个 push_back() 函数来接受如下输入:

int n;
cin>>n;
vector<int> a;//Vector declared WITHOUT size
int input;
for(int i=0;i<n;i++){
cin>>input;
a.push_back(input);
}

最佳答案

在 vector 上使用 [] 运算符假定给定索引处的对象是有效的。如果您的 vector 尚未分配其内部缓冲区以适应此索引,则这是未定义的行为。或者,push_back() 只是附加到 vector 的末尾,并在需要时重新分配一个更大的内部缓冲区,因此它永远不会以相同的方式执行未定义的行为。通过在使用 [] 访问它之前显式调整 vector 的大小,调整数组的大小,以便定义访问元素 0n-1,但任何超出 n-1 的行为都是未定义的行为。

关于c++ - 为什么没有大小声明的 vector 需要 push_back 来接受带有 cin 的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38316867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com