标准STL序列容器:vector、string、deque和list。
标准STL关联容器:set、multiset、map和multimap。
非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一个重型字符串
非标准关联容器hash_set、hash_multiset、hash_map和hash_multimap。 标准STL容器提供了四种不同的迭代器:iterator、 const_iterator、reverse_iterator和const_reverse_iterator。 每个标准容器类都提供四种迭代器类型。
对于container<T>而言,iterator的作用相当于T*,
而const_iterator则相当于const T*(你可能也见过T const*这样的写法:它们意思一样的)。
增加一个iterator或 者const_iterator可以在一个从容器开头趋向尾部的遍历中让你移动到容器的下一个元素。
reverse_iterator与 const_reverse_iterator同样相当于对应的T*和const T*,
所不同的是,增加reverse_iterator或者 const_reverse_iterator会在从尾到头的遍历中让你移动到容器的下一个元素。
/* 序列容器删除 */
#include <iostream>
#include <string.h>
#include <vector>
#include <list>
#include <map>
#include <time.h>
#include <algorithm> //remove_if头文件 using namespace std; bool badValue1(int x)
{
return ( == x ? true : false);
} bool badValue2(int x)
{
return ( == x ? true : false);
} void printNum(int x)
{
cout << x << endl;
} void test()
{
vector<int> v1 = { ,,,,,,, }; //删除vector、string、deque指定元素的方法
v1.erase(remove_if(v1.begin(), v1.end(), badValue1));
for_each(v1.begin(), v1.end(), printNum); //删除vector、string、deque过程中如果需要做特别操作,那么必须循环遍历使用erase方法删除
vector<int>::iterator it;
for (it = v1.begin(); it != v1.end();)
{
//注意序列容器的删除用法
if (badValue2(*it))
{
cout << "i am erase ." << *it << endl;
it = v1.erase(it);
}
else
{
it++;//这里使用前置++和后置+=没区别
}
} for_each(v1.begin(), v1.end(), printNum); } int main()
{
test();
getchar();
return ;
}
/* 关联容器删除 */
#include <iostream>
#include <string>
#include <vector>
#include <list>
#include <map>
#include <time.h>
#include <algorithm> //remove_if头文件 using namespace std; void test()
{
map<int, string> m1;
m1.insert(make_pair(, "a"));
m1.insert(make_pair(, "b"));
m1.insert(make_pair(, "c"));
m1.insert(make_pair(, "d"));
m1.insert(make_pair(, "e"));
m1.insert(make_pair(, "f")); //删除set、multiset、map和multimap指定元素的方法,关联容器没有remove方法,只能遍历删除
map<int, string>::iterator it; for (it = m1.begin(); it != m1.end(); /*递增条件为空*/)
{
if ("a" == it->second)
{
m1.erase(it++);//注意这里使用后置++,表示先取得后面的迭代器,返回当前迭代器给earse方法
}
else
{
it++;
}
} for (it = m1.begin(); it != m1.end(); ++it)
{
cout << it->second << endl;
} } int main()
{
test();
getchar();
return ;
}
为了避免你奇怪list的适当方法是什么,事实表明对于迭代和删除,你可以像vector/string/deque一样或像关联 容器一样对待list;两种方法都可以为list工作
总结:
几乎所有的容器都在同名的头文件里,比如,vector在<vector>中声明,list在<list>中声明等。例外的 是<set>和<map>。<set>声明了set和multiset
,<map>声明了map和multimap。
除了四个算法外,所有的算法都在<algorithm>中声明。例外的是accumulate(参见条款37)、 inner_product、adjacent_difference和partial_sum。
这些算法在<numeric>中声明。
特殊的迭代器,包括istream_iterators和istreambuf_iterator,在<iterator>中声明。
标准仿函数(比如less<T>)和仿函数适配器(比如not1、bind2nd)在<functional>中声明

Sword STL容器分类介绍的更多相关文章

  1. STL容器分类

  2. 史上最全的各种C++ STL容器全解析

    史上最全的C++ STL 容器大礼包 为什么\(C++\)比\(C\)更受人欢迎呢?除了\(C++\) 的编译令人感到更舒适,\(C++\)的标准模板库(\(STL\))也占了很重要的原因.当你还在用 ...

  3. c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例

    c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...

  4. STL容器的适用情况

     转自http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/ ly; mso-default-props:yes; m ...

  5. C++中STL容器的比较

    基本参考 https://blog.csdn.net/qq_14898543/article/details/51381642 容器特性: vector:典型的序列容器,C++标准严格要求次容器的实现 ...

  6. STL vector用法介绍

    STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...

  7. STL容器的内存分配

    这篇文章参考的是侯捷的<STL源码剖析>,所以主要介绍的是SGI STL实现版本,这个版本也是g++自带的版本,另外有J.Plauger实现版本对应的是cl自带的版本,他们都是基于HP实现 ...

  8. css属性分类介绍

    css属性分类介绍 CSS分类目录 文本/字体/颜色 文本相关 字体相关 颜色相关 背景相关 大小/布局 大小属性 margin 外边距 padding 内边距 border 边框 position ...

  9. 关于STL容器

    容器: 概念:如果把数据看做物体,容器就是放置这些物体的器物,因为其内部结构不同,数据摆放的方式不同,取用的方式也不同,我们把他们抽象成不同的模板类,使用时去实例化它 分类: 序列容器.关联容器.容器 ...

随机推荐

  1. 关于 隐藏元素(样式为 display: none 的元素)及其子元素 获取不到高度的问题

    IE 和 Edge 中都是这样,Chrome中好像还好. 方法就是换一个样式,还有一个控制显示隐藏的:visibility 相关文档:http://www.w3school.com.cn/cssref ...

  2. Android基础知识之Manifest中的Intent-filter元素

    原文:http://android.eoe.cn/topic/android_sdk :指定活动.服务.或者广播接收者能支持的intent的类型.一个意图过滤器声明了其父组件的能力——一个活动或者服务 ...

  3. 深入理解Linux内核-页高速缓存

    页高速缓存:1.磁盘高速缓存的一种 2.一种对完整的数据页进行操作的磁盘高速缓存.3.将一页数据写到块设备的时候,内核首先检查对应的页是否已经在高速缓存中,不在就添加并填充数据.4.I\O数据的传送并 ...

  4. 2-2-求并集A=A∪B-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版

    课本源码部分 第2章  线性表 - 求并集A=A∪B ——<数据结构>-严蔚敏.吴伟民版        ★有疑问先阅读★ 源码使用说明  链接☛☛☛ <数据结构-C语言版>(严 ...

  5. spark join

    https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-sql-joins.html https://acadg ...

  6. Linux下用netstat查看网络状态、端口状态

    在linux一般使用netstat 来查看系统端口使用情况步. netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实际的网络连接以及每一个网络接口设备的 netstat命 ...

  7. CSS中Zen Coding

    值别名 有几个常用的别名: p → % e → em x → ex 可以用这些别名来代替完整的单位: w100p → width: 100% m10p30e5x → margin: 10% 30em ...

  8. Android 编程下 TextView 添加链接的一种方式

    通过如下这种方式给 TextView 添加的链接支持链接样式.点击事件.href 样式,代码如下: package cn.sunzn.tlink; import android.app.Activit ...

  9. asp.net上传大文件-请求筛选模块被配置为拒绝超过请求内容长度的请求

    HTTP错误404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求,原因是Web服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 默认文件上传大 ...

  10. window.opener方法的使用 js 跨域

    用到了这个方法: window.opener.location.reload() 与 window.opener.location.href=window.opener.location.href 都 ...