c++ - 为什么向量的大小是静态的,我们仍然可以添加更多值?
问题描述
我是 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 编译器。
解决方案
固定的是
sizeof( vector<int> )
一个向量可以包含不同数量的元素,但这些元素存储在堆上,因此对向量没有贡献sizeof
。元素的数量是v.size()
(并且可以改变)。
您创建一个包含 10 个元素的向量:
vector<int> v(10);
但是随后您尝试访问循环中不存在的元素。例如v[10]
不会导致编译器错误,也不保证会导致运行时错误。尽管如此,它肯定是错误的。越界访问向量会导致未定义的行为。代码的输出可以是任何东西。
推荐阅读
- python - 如何通过选项卡组中的所有按钮进行选项卡?
- excel - 尽管在不同的工作簿中运行良好,但保存为宏会引发运行时错误“1004”
- django - Ajax 调用以通过单击按钮返回填充表单字段 django
- oracle - Oracle ON LOGON 触发器如何影响性能?
- javascript - 如何从javascript中的多个属性中过滤数组的JSON对象
- c - 复合文字表达式的实际用途?
- android - 从实时数据库中获取子项的多个值
- excel - VBA Excel 将图像从活动工作簿复制到另一个工作簿
- r - 使用 R 数据表计算累积日期的罢工率
- kubernetes - 未找到 EKS 负载均衡器 IP