首页 > 解决方案 > 为什么向量的大小是静态的,我们仍然可以添加更多值?

问题描述

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

代码是这些简单的行:

#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 编译器。

标签: c++vectorsize

解决方案


固定的是

sizeof( vector<int> )

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

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

vector<int> v(10); 

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


推荐阅读