1 Standard Template Library (STL)主要有两种组件构成,一时容器container 另一种组件是 操作
这些容器类的泛型算法
1 vector and list 是序列是容器
2 map 是一对keyvalue 组合 3 set 其中仅含有key 我们对它惊醒查询操作。主要是判断某之是否存在其中。
2 指针的算术运算
当数组被传递给函数,仅有第一个元素的地址会被传递
template <typename elemType>
elemType * find(const elemType *array,int size,const elemType &value)
{
if(!array||size<1)
return 0;
for(int i=0;i<size;i++)
{
if(array[i]==value)
return &array[i];
}
/*
for(int i=0;i<size;i++,array++)
{
if(*array==value)
return array;
}
*/
return 0;
}
template <typename elemType>
elemType * find(const elemType *first,const elemType *last,const elemType &value)
{
if(!fist||!last)
return 0;
for(;first!=last;first++)
if(*first==value)
return first;
return 0;
}
由于vector 和array 相同,
array[2] equals *(array+2) 2 指两个elemType 单位
由于vector 和array 相同,都是以一块赖宁许内存存储所有元素,所以我们可以使用和array 一样的处理处理
方式
vector<string> svec
find(&vec[],&svec[vec.size()].serch_value);
3 了解Iterator
1 template<typename elemType>
void display(const vector<elemType>&vec,ostream &os)
{
vector<elemType>::const_iterator iter=vec.begin();
vector<elemType>::const_iterator end_it=vec.end();
for(;iter !=end_it;++iter)
{
os<<"ite3r"<<endl;
}
}
2 find
template<typename IteratorTypes,typename elemType>
IteratorType
find(IteratorType first,IteratorType last,count elemType &values)
{
for(;first!=last;++first)
if(value==*first)
return first;
}
return last;
const int siz3=9;
int ia[size]={1,2,3,4,5,6,7,8,9};
vector<int> vec=(ia,ia+size);
list<int> list=(ia,ia+size);
int *pia=find(ia,ia+size,3);
if(pia!=ia+size)
//find...;
vector<int>::iterator it;
it=find(vec.begin(),vec.end,1024);
if(it!=vec.end())
//find...
list<int>::iterator it;
it=find(list.first().list.end,4);
4 所有容器的共同操作
equality(==),assignment(=),empty(),size(),clear()
begin() 返回一个iterator,只向容器的第一个元素
end() 返回一个iterator,只向容器的最后 一个元素
5 使用序列容器
1 vector 和list 是两个最主要的序列式容器 vector 式一块连续的内存。取数据效率较高,但是存数据
但是如果在任意位置插入或删除数据,效率就比较低。(但是在最后一位添加和删除数据效率都比较高)
2 list 系以双向连接来存储内存,可以任意执行前进或后退操作,可以在任意位置安插或删除数据。
3 deque 以连续的内存存储元素,但是deque 在最前端元素的安插和删除操作更有效,末端相同
4 #include<vector>
#include<list>
#include<deque>
5 产生空的容器
list<string> slist;
vector<int> ivec;
6 产生特定大小的容器,每个元素都以千默认的值作为初值
list<int> ilist(1024);
vector<string> svec(32);
7产生特定大小的容器,并为每个软速制定初值
vector<int> ivec(10,-1)
list<string> slist(16,'unassigned');
8 int ia[9]={1,2,3,4,5,6,7,8,9};
vector<int> fib(ia,ia+8);
9 根据某个容器产生新容器,复制软来容器的元素,作为新容器的初值
list<string> slist;
list<string> slist2<slist>
10 push_back(),pob_back() 在容器末尾进行安插和删除操作。在deque和list可以用push_front
和pop_front 在最前面天加和删除操作。
11 fornt() 和back()可以取回最前和最后的值
12 iterator insert(iterator position,elemType value)将value 安插于position 之前,返回一个iterator
指向被安插的元素
list<int>ilist;
list<int>:: it=ilist.begin();
while(it!=ilist.end())
if(*it>=ival)
{
ilist.inert(it,ival);
break;
}
if(it==ilist.end())
ilist.pushi_back(ival);