STL入门第一堂课

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。
头文件:
说明:可以拷贝任何类型的对象
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用法总结一下!加油!

你可能感兴趣的:(c++,stl)