C++容器

资料来源:C++常用容器_c++容器_冬风诉的博客-CSDN博客

顺序容器(vector,string deque,list)
关联容器(set(集合容器)/multliset(多重集合容器)),(map(映射容器)/multimap(多重映射容器))
容器适配器(stack(栈)/queue(队列)/priority_queue(优先级队列))


容器不能直接写push和pop,要写明操作的口。

一、顺序容器

1.vector

size()//返回返回容器中元素个数
begin()//返回头部迭代器
end()//返回尾部+1迭代器
rbegin()//返回逆首部迭代器
rend()//返回逆尾部-1迭代器
front()//返回首个元素
back()//返回尾部元素
push_back()//在末尾添加一个函数
emplace_back()//和push_back()是一样的作用
pop_back()//弹出最后一个元素
empty()//判断是否为空
insert()//在指定位置插入元素
erase()//在指定位置删除元素
clear()//清空容器

可以从末尾快速地插入与删除元素,快速的随机访问元素。但vector只能在末尾插入与删除元素,删除之前需要用empty判断是否为空。

2.string

empty()://判断当前字符串是否为空串
size()://返回当前字符串的实际字符个数(返回结果为size_type类型)
length()://返回当前字符串的实际字符个数
[index]://返回当前字符串位于index位置的字符,index从0开始
s(index)://返回当前字符串位于index位置的字符
compare(const string& str)://返回当前字符串与字符串str的比较结果,在比较时,若两者相等,返回0,若前者小于后者返回-1,否则返回1
append(cstr)://在当前字符串的末尾添加一个字符串str
insert(size_type index,const string & str)://在当前字符串的index处插入一个字符串str
find(string& s,size_type pos)://从当前字符串中的pos位置开始查找字符串s的第一个位置,找到后返回其位置,没有找到返回-1
replace(size_type index,size_type len,const string& str)://将当前字符串中起始于index的len个字符用一个字符串str替换
replace(iterator begin,iterator end,const string& str)://将当前字符串中由迭代器begin和end所指区间的所有字符用一个字符串替换
substr(size_type index);//返回当前字符串起始于index的子串
substr(size_type index,size_type len)://返回当前字符串起始于index的长度为len的子串
clear()://删除当前字符串中的所有字符
erase()://删除当前字符串中所有字符
erase(size_type index)://删除当前字符串从index开始的所有字符
erase(size_type index,size_type len)://删除当前字符串从index开始的len个字符

3.deque 双端队列

双端队列容器由若干个块构成,每个块中的元素的地址是连续的,但是块的地址是不连续的。

可以从前面或后面快速的插入与删除元素,并可以快速地随机访问元素。

empty()://判断双端队列容器是否为空队
size()://返回双端队列容器中的元素个数
front()://取队头元素
back()://取队尾元素
push_front(elem)://在队头插入元素elem
emplace_front(elem);	
push_back(elem)://在队尾插入元素elem
emplace_back(elem);
pop_front()://删除队头一个元素
pop_back()://删除队尾一个元素
erase()://从双端队列容器中删除一个或几个元素
clear()://删除双端队列容器中的所有元素
begin()://该函数的两个版本返回iterator或const_iterator,引用容器的第一个元素
end()://该函数的两个版本返回iterator或const_iterator,引用容器的最后一个元素后面的一个位置
rbegin()://该函数的两个版本返回reverse_iterator或const_reverse_iterator,引用容器的最后一个元素
rend()://该函数的两个版本返回reverse_iterator或const_reverse_iterator,引用容器的第一个元素前面的一个位置

4.list

empty()://判断链表容器是否为空
size()://返回链表容器中的实际元素个数
push_back(elem)://在链尾尾部插入元素elem
emplace_back(elem);
pop_back()://删除链表容器最后一个元素
remove()://删除链表容器中所有指定值的元素
remove_if(cmp)://删除链表容器中满足条件的元素
erase()://从链表容器中删除一个或几个元素
unique()://删除链表容器中相邻的重复元素
clear()://删除链表容器中的所有元素
insert(pos,elem)://在pos位置插入元素elem,即将元素elem插入到迭代器pos指定的元素之前
insert(pos,n,elem)://在pos位置插入n个元素elem
insert(pos,pos1,pos2)://在迭代器pos处插入[pos1,pos2)的元素 lst.inset(it,start,end)
reverse()://反转链表
sort()://对链表容器中的元素排序
begin()://该函数的两个版本返回iterator或const_iterator,引用容器的第一个元素
end()://该函数的两个版本返回iterator或const_iterator,引用容器的最后一个元素后面的一个位置
rbegin()://该函数的两个版本返回reverse_iterator或const_reverse_iterator,引用容器的最后一个元素
rend()://该函数的两个版本返回reverse_iterator或const_reverse_iterator,引用容器的第一个元素前面的一个位置

STL提供的sort()排序算法主要用于支持随机访问的容器,而list容器不支持随机访问,为此list容器提供了sort()成员函数用于元素排序,类似的还有unique(),reverse(),merge()等STL算法。

二、关联容器

关联容器中的每个元素有一个key(关键字),通过key来存储和读取元素,这些关键字可能与元素在容器中的位置无关,所以关联容器不提供顺序容器中的front(),push_front(),back(),push_back()以及pop_back()操作。

哈希表的地方写过。

二、容器适配器

适配器容器是指基于其他容器实现的容器,也就是说适配器容器包含另一个容器作为其底层容器,在底层容器的基础上实现适配器容器的功能,实际上在算法设计中可以将适配器容器作为一般容器来使用

1.stack

栈容器默认的底层容器是deque,用户也可以指定其他底层容器,如:

stack<string,vector<string>> myst;  //第二个参数指定底层容器为vector

stack容器只有一个出口,即栈顶,可以在栈顶插入(进栈)和删除(出栈)元素,而不允许顺序遍历,所以stack容器没begin()/end()/rbegin()/rend()迭代器成员函数,stack容器的主要成员为:

empty()://判断栈容器是否为空
size()://返回栈容器中的实际元素个数
push(elem)://元素elem进栈
top()://返回栈顶元素
pop()://元素出栈

2.queue

不允许顺序遍历,没有begin()/end()和rbegin()/rend()这样的用于迭代器的成员函数。

empty()://判断队列容器是否为空
size()://返回队列容器中的实际元素个数
front()://返回队头元素
back()://返回队尾元素
push(elem)://元素elem进队,从队尾back进
pop()://元素出队,从队头front出

3.priority_queue 优先级队列

优先队列是一种具有受限访问操作的存储结构,元素可以以任意顺序进入优先队列,一旦元素在优先队列容器中,出队操作将出队列中优先级最高的元素

// 主要成员函数
empty()://判断优先队列容器是否为空
size()://返回优先队列容器中的实际元素个数
push(elem)://元素elem进队
top()://获取队头元素
pop()://元素出队

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值