类型别名 iterator 此容器类型的迭代类型const_iterator 可以读取元素,但不能修改元素的迭代器类型size_type 无符号整数类型,足够保存此种容器类型最大可能容器的大小difference_type 带符号整数类型,足够保存两个迭代器之间的距离value_type 元素类型reference 元素的左值类型;与value_type&含义相同const_reference 元素的const左值类型(即,const value_type&)原文:ht...
什么是容器首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对 象,当然这是一个朴素的理解,这种“对象”还包含了一系列处理“其它对象”的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处, 就是“容器类是一种对特定代码重用问题的良好的解决方案”。容器还...
转:http://blog.csdn.net/zhanghaodx082/article/details/179194011,using学习 两种方式:第一,完全引入命名空间y,如,using namespace std;
以后要用std中定义的符号就方便了,如cin>> ;
第二,只引入要用的符号,如,using std::cin;
注意:.h头文件中,最好不要只用第一种方式,因为.h文件在预处理时会完全复制到.cpp文件中,导致包含该.h的文件都引入了该命名空间。2,各种容器 1)string类型...
listlist是顺序容器中的一种,同vector相比,vector是顺序表的顺序存储方式,而list是顺序表的链式存储结构。一、STL中List特点: 1.循环双链表结构
2.具有一个尾结点,满足STL左闭右开的原则
3.与vector不同,对于list的迭代器而言,不再是简单数据类型的指针,因为list中每个Node所在的内存并不要求连续,对于迭代器的++,--等操作,并不是地址的++,--操作,而是需要切到下一个节点所在的地址。
...
[原]C++制作一个泛型容器(可以盛放各种类型的对象)2014-5-4阅读494 评论0如果你想要一个可以盛放各种类型的对象,那么基本上可以说在C++里没有,或者你可以用vector<boost::any>或者其他的什么来模拟,我说那都不怎么好。问题就在于我的类型会在运行时动态的增加,你不可能知道我会增加什么类型,我的头文件也不会给你。 现在是不是觉得C++的泛型用不上了,是的,C++的泛型本质上是对相似代码的复用,做的事情都是同一件事情,但...
stack是一种容器适配器,专门设计用于在LIFO上下文中操作(后进先出),其中元素仅从容器的一端插入和删除。容器适配器,而不是一种容器。它是容器适配器是指,只要支持一系列方法的容器(empty, size, back, push_back, pop_back),都能作为stack使用。stack 有可能实际上是一个 vector, deque 或 list. 如果没有特殊指明,将使用 deque作为stack的实际容器。成员函数empty()测试栈是否为空,为空返回true,否则返回false。bool em...
容器汇编1 比较简单的若干容器1. stringbegin 可以得到对象起始点end 可以得到对象的结束点empty 可以得到容器是否为空size 可以得到容器的大小swap 可以和另外一个容器交换其内容2. vector可以使用中括号的下标来访问其成员(同 string)可以使用 data 来获得指向其内容的裸指针(同 string)可以使用 capacity 来获得当前分配的存储空间的大小,以元素数量计(同 string)可以使用 reserve 来改变所需的存储空间的大小,成功后 c...
使用copy函数打印容器(container)元素本文地址: http://blog.csdn.net/caroline_wendyC++可以使用copy函数输出容器(container)中的元素, 可以代替for循环.头文件: #include <algorithm>#include <iterator>格式: std::copy(cont.begin(), cont.end(),std::ostream_iterator<Type>(std::cout, " "));Type是需要输出格式的类型, 如容器是vector<int>, 则Type是int.代码:/** main.cpp** Created on: 2014年6月17日* Author: Spi...
在写C++程序的时候会发现STL是一个不错的东西,减少了代码量,使代码的复用率大大提高,减轻了程序猿的负担。还有一个就是容器,你会发现要是自己写一个链表、队列,或者是数组的时候,既要花时间还要操心怎么去维护,里面的指针啊,内存够不够用啊,长度问题,有没有可能溢出啊等等一系列的问题等着我们去解决,还是比较头疼的。所以容器的出现解决了这一个问题,它将这些数据结构都封装成了一个类,只需要加上头文件,我们就可以...
C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值。map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。 map的功能自动建立Key - value的对应。key 和 value可以是任意你需要的类型。 根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1...
set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构,在插入元素时,他会自动调整二叉树的排列,把该元素放到合适的位置上,以确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树的高度相等,这样,二叉树的高度最小,从而检索的速度最快。要注意的是,他不会重复插入相同键值的元素,二采取忽略处理,如下图所示:
平衡二叉检索树的...
最近研究了一下C++线程池,在网上看了一下别人的代码,写的很不错,参见:http://www.cnblogs.com/lidabo/p/3328646.html其中,他用了STL的set容器管理线程池中的线程,在线程池运行的过程中需要频繁的进行插入、查找和删除的操作,我个人觉得这些操作会是线程池中的很大的时间开销,想起了大学老师讲过的一个TireTree(字典树)的数据结构,利用多叉树可以快速的实现元素的插入、查找和删除,稍加改动也可以支持自动排序,唯一的缺点...
map,vector 等容器内容的循环删除问题(C++) map,vector等容器的循环删除不能用普通的方法删除:for(auto p=list.begin();p!=list.end();p++)list.erase(p);类似的方式,会出错的,不信你调试试试 :)这里使用了一个` iterator` 的一个自增/自减 ,来巧妙的实现了, 删除当前的`iterator,` 但是有给当前的`iterator`赋值为其下一个的操作,不至于删除后,当前的 `iterator` 就失效了! 代码: 1 #include <iostream>2 #include <vector>3 #inc...
容器适配器是用来扩展7中基本容器的,是修改和调整其他类接口的类。他们不提供存放数据的实际数据结构的实现方法,而且容器适配器也不支持迭代器。1、标准栈容器使用STL中的标准栈为程序员提供了一层附加的保护,下溢和上溢的情况在发生之间就会被捕获。标准栈容器是使用适配器与一种基础容器相结合来实现的。使用适配器类,必须要包含他们的头文件,栈是<stack>中声明的。适配器在声明时必须传递参数,指明栈元素的类型及适配器将...
链表:将数据进行链式存储。物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接进行实现的。STL中的链表是一个双向循环链表。一、构造函数list<T> lst;
list(bag,end);
list(n,elem);
list(const list &list);二、list的赋值和交换assign(beg,end);
assign(n,ele);
list& operator=(const list &list);
swap(list);#include<iostream>
#include<list>
#include<algorithm>
usingnamespace std;
//加入cons...