Sword STL容器分类介绍
标准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容器分类介绍的更多相关文章
- STL容器分类
- 史上最全的各种C++ STL容器全解析
史上最全的C++ STL 容器大礼包 为什么\(C++\)比\(C\)更受人欢迎呢?除了\(C++\) 的编译令人感到更舒适,\(C++\)的标准模板库(\(STL\))也占了很重要的原因.当你还在用 ...
- c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...
- STL容器的适用情况
转自http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/ ly; mso-default-props:yes; m ...
- C++中STL容器的比较
基本参考 https://blog.csdn.net/qq_14898543/article/details/51381642 容器特性: vector:典型的序列容器,C++标准严格要求次容器的实现 ...
- STL vector用法介绍
STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...
- STL容器的内存分配
这篇文章参考的是侯捷的<STL源码剖析>,所以主要介绍的是SGI STL实现版本,这个版本也是g++自带的版本,另外有J.Plauger实现版本对应的是cl自带的版本,他们都是基于HP实现 ...
- css属性分类介绍
css属性分类介绍 CSS分类目录 文本/字体/颜色 文本相关 字体相关 颜色相关 背景相关 大小/布局 大小属性 margin 外边距 padding 内边距 border 边框 position ...
- 关于STL容器
容器: 概念:如果把数据看做物体,容器就是放置这些物体的器物,因为其内部结构不同,数据摆放的方式不同,取用的方式也不同,我们把他们抽象成不同的模板类,使用时去实例化它 分类: 序列容器.关联容器.容器 ...
随机推荐
- 重载tostring()方法重要性
曾经知道继承于object的类都有这个toString方法,重来没在项目中使用过这方法,同一时候也没对该方法进行重载.在如今这个公司上班,才知道了toString方法的重要性. 并且也懂得了重载tos ...
- mongoose更新文档的时候让某个字段自增
Station.update({ _id: req.params.id }, { $set: req.body, $inc: { count: 1 } }, { multi: false }, cal ...
- ubuntu 16.04 root 初始密码设置
()默认root密码是随机的,即每次开机都有一个新的root密码.我们可以在终端输命令 sudo passwd,然后输入当前用户的密码,enter ()终端会提示我们输入新的密码并确认,此时的密码就是 ...
- 未能为数据库 '*'中得对象'*'分配空间,因文件组'PRIMARY'已满
服务器使用mssqlserver2005,最近经常出现无法新增信息错误,查看日志,发现严重错误提示,内容大致为: 无法为数据库 'weixin_main' 中的对象 'dbo.wx_logs'.'PK ...
- 【线程】linux之多线程同步互斥技术
1.同步机制 线程同步机制主要有:互斥量/信号量/条件变量/读写锁等. 2.技术示例 创建2个计数线程A和B,每次计数加1,当为偶数时,A线程计数:当为奇数时,B线程计数. 源码: ...
- [Java]随记--HttpClient发送put请求
http://blog.csdn.net/u010989191/article/details/52852155 ******************************************* ...
- Centos7.4使用SoftEther搭建V.PN
参考: https://blog.csdn.net/qq_39591494/article/details/78625394?locationNum=9&fps=1 https://www.b ...
- 【TensorFlow】TF-tf.nn.dropout
官方的接口是这样的 tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None, name=None) 根据给出的keep_prob参数,将输入te ...
- [转]java按指定编码写入和读取文件内容的类
读文件: BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符.数组和行的高效读取. 可以指定缓冲区的大小,或者可使用默认的大小.大多数情况下,默认值就足够大了. 通常,R ...
- Fat-jar 打包,并使用 proguard 混淆代码
. . . . . Build Fat Jar 的时候在 Clas-Path 中填入需要引用的第三方 jar 包,如下图: 点击下一步,只勾选自己的项目,其它第三方包都不要勾选,否则混淆会出现问题. ...