为什么向量的大小是静态的,而我们仍然可以添加更多的值?

Why are vectors' size static and we still can add more values?

我完全是 C++ 的初学者,但我有一些编程基础知识(Python 主要),我正在尝试学习 C++。正如问题所暗示的那样,向量具有静态大小(至少我在学习中读到的material)但我们仍然可以为大小授权添加更多值。我写了一个简单的代码来知道如果我将更多的值传递给一个向量,而不是它的大小授权的限制,我会得到什么错误,令人惊讶的是我没有得到任何错误。

代码是这些简单的行:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int it=0,a;
    vector<int> v(10); 
    for(a=1; a<21; a++)
    {
            v[it]=x;
            cout << v[it] << endl;
            it++;
    }
    cout<<"Values stored in v";
    for(i=0;i<it;i++)
        cout<<v[i]<<" ";
    cout<<endl;
    cout<<"Vector's size : "<<v.size()<<endl;
    return 0;
}

我用 cout<<"Values stored in v"; 得到的都是从 1 到 20 的值,但我仍然得到大小是 10。

如果这有帮助,我正在使用 Windows 10 x64 并使用 Qt Creator 编译器。

固定的是

sizeof( vector<int> )

向量可以包含不同数量的元素,但这些元素存储在堆中,因此对向量没有贡献 sizeof。元素的数量是 v.size()(并且可以更改)。

您创建了一个包含 10 个元素的向量:

vector<int> v(10); 

但是随后您尝试访问循环中不存在的元素。例如 v[10] 不会导致编译器错误,也不保证会导致运行时错误。尽管如此,它肯定是错误的。越界访问向量会导致 undefined behavior。代码的输出可以是任何东西。