STL vector、关联容器、queue

一、关联容器

元素是排序的

插入任何元素,都按相应的排序规则来确定其位置

在查找时具有非常好的性能

通常以平衡二叉树方式实现,插入和检索的时间是o(log(N))

*set/multiset 头文件<set>

set即集合。set中不允许有相同的元素,multiset中允许有相同的元素

*map/multimap 头文件<map>

二、顺序容器和关联容器都有的成员函数

begin:  返回指向容器中第一个元素的迭代器

end:     返回指向容器中最后一个元素后面的位置迭代器

rbegin: 返回指向容器中最后一个元素的迭代器

rend:    返回指向容器中第一个元素前面的位置迭代器

erase:   从容器中删除一个或几个元素

clear:    从容器中删除所有元素

三、顺序容器的常用成员函数

front:返回容器中第一个元素的引用

back:返回容器中最后一个元素的引用

push_back(const T& x):在容器末尾中添加新元素

pop_back:删除容器末尾的元素

erase(interator pos):删除迭代器指向的元素(可能会使该迭代器失效)或删除一个区间,返回被删除元素后面的那个元素的迭代器(pos从1算起)

四、迭代器

用于指向顺序容器和关联容器中的元素

迭代器用法和指针相似

有const和非const两种

通过迭代器可以读取它指向的元素

通过非const迭代器还能修改其指向的元素 

五、vector(顺序容器) 

1、向量类成员函数原型:

(1)----迭代器iterator----

和前面第二部分内容一样

(2)----容量capacity----

size_type size()//返回向量元素数目

size_type max_size()//返回向量能容纳的最大元素数目

void resize(siez_type sz,T c=T())//重置向量长度为sz,c填充到扩充元素中

size_type capacity() //返回向量容器存储空间大小

bool empty()//测试向量是否为空

void reserve(size_type n)//为向量申请能容纳n个元素的空间

(3)----元素存取----

operator [](size_type n)//返回向量第n个位置元素的运算符,n从0起

at(size_type n)//返回向量第n个位置,n从0起

(4)----向量调节器modifiers----

void assign(size_type n,const  T& u)//向量赋n个u值

void insert(iterator pos,size_type n,const T& x)//在向量pos处插入n个元素值x,pos从1起

void swap(vector<T,Allocator>& vec)//与向量vec互换元素

 

2、下面这段代码是用vector实现二维数组

vector<vector <int> >v(3);//v有三个元素,每个元素都是vector<int>容器
    for(int i=0;i<v.size();i++)
        for(int j=0;j<4;j++)
        v[i].push_back(j);
        
    for(int i=0;i<v.size();i++)
    {
        for(int j=0;j<v[i].size();j++)
            cout<<v[i][j]<<" ";
        cout<<endl;

    }

 

3、vector的构造函数

vector() //无参构造函数

vector(size_type num,const type & val) //构造一个初始放入num个值为val的元素的Vector

vector(const vector & form)    //构造一个与vector from 相同的vector,其实这个是拷贝构造函数

vector(input_iterator start,input_iterator end)  // 构造一个初始值为[start,end)区间元素的Vector(注:半开区间).


构造函数的使用示例:

第一种:

#include<iostream>
#include<vector>

using namespace std;

int main() {
    //定义一个使用无参构造的vector
    vector<int> test;

}


第二种:

int main() {
    //建立一个含有10个1 的vector
    vector<int> test(10,1);

}


第三种:

int main() {
    //建立一个含有10个1 的vector
    vector<int> test(10,1);
    //使用拷贝构造函数,构建一个test的复制品
    vector<int> copy(test);

}


第四种:

int main() {
    //建立一个含有10个1 的vector
    vector<int> test(10,1);
    //使用两个迭代器指定的范围内的容器的值来初始化copy
    //至于cbegin和cend后续会介绍
    vector<int> copy(test.cbegin(),test.cend());

}

 

所有适用于vector的操作都适用于deque,但是deque还有push_front(将元素插入到前面)和pop_front(删除最前面的元素)操作,复杂度是o(1)

六、list(双向链表)

在模板里面定义这种类型不确定的容器上面的迭代器,前面要加一个typename

比如:

typename list<T>::const_iterator i;//typename用来说明list<T>::const_iterator i是个类型

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值