STL(standard template library)入门学习
STL是一些容器、算法和其他组件的集合。
c++定义数组
int a[n];
n必须是常量,实际应用中无法确定n的具体值,因而在定义n时选择最大值,造成存储空间的浪费。
在堆空间中动态申请内存,长度可以是变量。
int *p=new int[n];
可以根据n动态申请内存空间,不会造成存储空间的浪费。如果在运行过程中出现空间不足的情况,需要加大存储空间。
申请另外较大存储空间:
int *temp=new int[m];
将原内存空间的数据全部复制到新申请的内存空间:
memcpy(temp,p,sizeof((int)*n);
将原来的堆空间释放
delete []p;
p=temp;
*注释:C 库函数 void *memcpy(void *str1, const void str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1。
头文件:<string.h>
说明:可以拷贝任何类型的对象
str2在使用过程中可以加n(表示str2开始复制的位置)
用STL实现定义数组的操作,使用向量模板vector。
vector<int a>;//a可以随存储数据的数量自动增长
for(int i=0;i<10;i++)
a.push_back(i);//向a中添加元素
a.resize(100);//通过调用函数调整a的大小
a[90]=100;//直接设定a的元素
a.clear();//删除a中的所有元素
a.resize(20,-1);//将a的大小定义为20,并用-1进行初始化
*注释:vector::void push_back (const value_type& val);
vector::void push_back (value_type&& val);
像队列一样,把新进入的元素加入vector的最后
void resize (size_type n, value_type val = value_type());
利用resize函数可以规定a内存大小,也可以设定初值,和reserve()要区分开,resize()分配了内存,可以直接进行赋值和调用,reserve()只是规定了容量,并没有分配内存,只有用push_back()添加新的元素后,才能调用和赋值*
借鉴资料:STL基础
(资料中间有些地方有一点问题,已修改。)
总结:
在认识STL中学习了两个新的知识点:memcpy和vector容器的使用,今天有时间就把string.h的库函数和vector用法总结一下!加油!