STL学习整理(一)

推荐书籍

《STL源码剖析》
《STL基础及应用》
《STL中文版》配的是VC6.0版本的STL PJ版本
《C++标准程序库》

STL特性

  1. 通用性、效率
  2. PJ版本(vc6.0中的)、SGI版本
  3. 模板、 数据结<容器> 、算法、迭代器(容器和算法之间的粘合剂)
  4. 空间配置器 容器 算法 迭代器 容器适配器 仿函数,容器主要分为三大类:顺序、关联、容器适配器
  5. 萃取的技法是关键(了解STL 的钥匙)
    初学者认为stl就是vecto、rlist、 stack,其实不然容器只是其中的一部分。

vector初始化的方法:

#include<iostream>
#include<vector>
using namespace std;
int main()
{
	int ar[10] = {1,2,3,4,5,6,7,8,9,10};
	vector<int> v1;
	vector<int> v2(10,2);
	vector<int> v3(ar, ar+10);

	for(int i=0; i<v3.size(); ++i)
	{
		cout<<v3[i]<<" ";
	}
	cout<<endl;
    //用迭代器访问不同的容器,其方法是一样的,但是底层是不一样的
	vector<int>::iterator it = v3.begin();
	while(it != v3.end())
	{
		cout<<*it<<" ";
		++it;
	}
	cout<<endl;
	return 0;
}

vector扩容的测试代码:

void main()
{
	vector<int> v1;
	cout<<"capacity = "<<v1.capacity()<<endl;
	v1.push_back(1);
	cout<<"capacity = "<<v1.capacity()<<endl;
	v1.push_back(2);
	cout<<"capacity = "<<v1.capacity()<<endl;
	v1.push_back(3);
	cout<<"capacity = "<<v1.capacity()<<endl;
	v1.push_back(4);
	cout<<"capacity = "<<v1.capacity()<<endl;
	v1.push_back(5);
	cout<<"capacity = "<<v1.capacity()<<endl;

}

迭代器失效的情况:

void main()
{
	int ar[10] = {1,2,3,4,5,6,7,8,9,10};
	vector<int> v1(ar, ar+10);
	//初始化的时候,容量是定的10个。用push_back的话容量不是10个
	cout<<"capacity = "<<v1.capacity()<<endl;

	vector<int>::iterator pos = v1.begin();//返回的是个迭代器(对象)
	//end()返回的是最后一个元素的下一个元素,为了能够访问到最后一个元素,前闭后开的哲学
	cout<<"*pos = "<<*pos<<endl;

	v1.push_back(100);
	//如果底层空间重新分配的话,pos迭代器就会失效
	pos = v1.begin();//重新给pos赋值,否则迭代器会失效
	cout<<"*pos = "<<*pos<<endl;
}

list的用法:

void main()
{
	list<int> mylist;
	mylist.push_back(1);
	mylist.push_front(2);
	mylist.pop_back();

	list<int>::iterator it = mylist.begin();

	cout<<"Head-->";
	while(it != mylist.end())
	{
		cout<<*it<<"-->";
		++it;
	}
	cout<<"Over."<<endl;
}

容器有很多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值