标准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. Android 启动、绘制、显示过程

    Activity 启动过程: startActivity()-> Instrumentation.execStartActivity()-> Binder->ActivityMana ...

  2. SPI和RAM IP核

    学习目的: (1) 熟悉SPI接口和它的读写时序: (2) 复习Verilog仿真语句中的$readmemb命令和$display命令: (3) 掌握SPI接口写时序操作的硬件语言描述流程(本例仅以写 ...

  3. 【Unity】9.2 如何添加粒子组件

    分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 粒子系统是作为组件附加到游戏对象上的,有两种添加办法. 二.方式1--添加已制作好的预制体 第1种方式是直接添加已经制作 ...

  4. 【ARM】AD转换器

    A/D转换器 A/D转换器,又称模/数转换器,顾名思义,就是把模拟信号数字化. 由于系统的实际处理对象往往都是一些模拟量(如温度.压力.位移.图像等),要使计算机或数字仪表能识别和处理这些信号,必须首 ...

  5. 【Socket】linux下http服务器开发

    1.mystery引入 1)超文本传输协议(HTTP)是一种应用于分布式.合作式.多媒体信息系统的应用层协议 2)工作原理 1)客户端一台客户机与服务器建立连接后,会发送一个请求给服务器,请求方式的格 ...

  6. SQLite - Java

    安装 在 Java 程序中使用 SQLite 之前,我们需要确保机器上已经有 SQLite JDBC Driver 驱动程序和 Java.可以查看 Java 教程了解如何在计算机上安装 Java.现在 ...

  7. JS实现获取当前URL和来源URL的方法

    通用模式: Javascript 正常取来源网页的URL只要用: index.html: <!DOCTYPE html> <html lang="zh-cn"&g ...

  8. Django admin 继承user表后密码为明文,继承UserAdmin,重写其方法

    Django用户继承AbstractUser后密码为明文 其实本不应该有这个问题,却花了我很久的时间,因为还是初学阶段. 造成这个原因是因为在admin注册的生活没有指定Admin 在app的admi ...

  9. Python实现敏感词过滤替换

    [本文出自天外归云的博客园] 问题 最近在网上搜到了一些练习题,对第十二题稍作修改如下: 敏感词文本文件“filtered_words.txt”,里面的内容: 北京人 人大 北京 程序员 公务员 领导 ...

  10. Pandas Dataframe增、删、改、查、去重、抽样基本操作

    总括 pandas的索引函数主要有三种: loc 标签索引,行和列的名称 iloc 整型索引(绝对位置索引),绝对意义上的几行几列,起始索引为0 ix 是 iloc 和 loc的合体 at是loc的快 ...