交流一下动态数组的逻辑
std标准模板动态库中有一个vector,就是动态数组
动态数组实现的就是在运行过程中根据使用多少增加或者减少数组长度
vevtor有一个参数,参数填写的值就是以4K位单位保留的空间
在保留的空间中初始分配一个页,写入数据,提交,在写入数据在提交,提交是分配页使用,但是写入的数据所占内存和小于4k,不会重新分配,检测机制如果即将大于4k就会在分配一个页使用
如果保留的空间不够使用,realloc会重新保留一个空间,一般是上次空间的2倍,操作系统的不同倍数不同,然后分配页,将之前的数据都拷贝进来,然后释放上次保留的空间,如果这次保留的空间仍然不够用在realloc,实现的动态数组长度增长
数组减少若是减少尾部的数据,那realloc一个小的空间,将前面用的拷贝进去,释放之前的保留空间,那尾部的数据就删掉了
如果是删掉中间的数据用的迭代指针
刚刚在网上浏览了一下怎么使用std直接使用vector便且试了一下,赋值代码如下
需要头文件:
#include "vector"
using std::vector;
vector<int>vlnts;
//我保留的空间是2,但是循环输入9次,第六行检测动态数组里面存放多少数据,是9,当我写博客到这里的时候忽然想起,保留的空间2是以页为单位的……8k,有点晚了,改天在试验吧
vector<int> v;
v.reserve(2);
char a;
for(int i=0; i<9; i++)
v.push_back(a=getchar());
int nSize = v.empty() ? -1 : static_cast<int>(v.size());
try
{
int iVal1 = v[7]; // not bounds checked - will not throw
int iVal2 = v.at(7); // bounds checked - will throw if out of range
}
catch(const exception& e)
{
cout << e.what();
}