C++标准模板库_note(1)

顺序性容器:

  • vector 从后面快速的插入和删除,直接访问任何元素(随机访问
  • deque 从前面或后面快速的插入和删除,直接访问任何元素(随机访问
  • list 双链表,从任何地方插入和删除

关联容器:

  • set 快速查找,不允许重复值。
  • multiset 快速查找,允许重复值。
  • map 一对多映射,基于关键字快速查找,不允许重复值。
  • multimap 一对多映射,基于关键字快速查找,允许重复值。

容器适配器:

  • stack 后进先出(栈)
  • queue 先进先出(队列)
  • priority queue 优先级最高的先出列

vector(向量容器)

线性顺序结构,相当于动态数组。

创建后会自动在内存分配一块连续的空间进行存储,大小也可以预先指定(capacity()返回这个大小)。当大小超过预分配的空间时会重新申请一块内存,但是这样的分配很耗时间(所以预先考虑需要的大小能节省时间),重新分配空间时会做如下操作:

  • 首先申请一块更大的内存
  • 然后将原来的数据拷贝到新的内存块中。
  • 其次销毁原来内存块中的对象。(析构)
  • 最后将原来的空间释放。

    所以,如果原来的数据量很大,这样的操作会导致很糟糕的性能。虽然是动态数组,但是预先知道数据的大小才能最好的发挥vector的性能。

特点:

  • 动态扩展
  • 随机访问
  • 节省空间(连续存储,大碎片少)
  • 内部插入删除的效率低(顺序表)
  • 只能在尾部push,pop
  • 预先分配适合的大小才能使性能最优

构造函数

vector<int> v1 //一个空的vector
vector<int> v2(5,1)//大小为5值为1的vector

进行赋值或比较

==, !=, <=, >=, <, >
访问某个特定位置 => []
如果两个vector相等:
    -则两个vector容量相等
    -相同位置的元素相等
比较按照词典规则

assign()对元素赋值

//将[start,end)的元素复制到当前vector
void assign(input_iterator start,input_iterator end);
//赋num个值为value的元素到vector中,会清除掉vector之前的内容
void assign(size_type num, const type &val)

at()返回指定位置元素

//和v[i]差不多,但是比v[i]安全
TYPE at(size_type loc);

back()返回最后一个元素

begin()返回第一个元素的迭代器

clear()清空所有元素

empty()判断是否为空

end()返回最后一个元素的迭代器(指向最后一个元素的下一位置)

erase()删除指定元素

//删除loc处元素
erase(iterator loc);
//删除start和end之间的元素
erase(iterator start,iterator end);

front();返回第一个元素的引用

get_allocator();返回vector的内存分配器

insert()插入元素

//在loc前插入val,返回这个元素的迭代器
insert(iterator loc ,const TYPE &val);
//在loc前插入Num个值为val的元素
insert(iterator loc,size_type num,const TYPE &val);
//在loc前插入[start,end)内所有元素
insert(iterator loc,iterator start,iterator end);

max_size() 返回容纳元素数量上限

pop_back()移除最后一个元素

push_back()在末尾插入元素

rbegin()尾部逆迭代器

rend()头部逆迭代器

reserve()设置最小容纳空间(类似初始化吧。。)

resize()改变大小

size()返回大小

swap()交换vector

时间: 2024-10-30 07:43:44

C++标准模板库_note(1)的相关文章

C++标准模板库_note(2)

List(双向链表) 无需指定预先分配内存大小就可以动态扩展,原因是存储在不连续的内存空间,由指针将其链接起来. 因为是链表所以随机访问的性能不好,但是在任何位置插入删除的性能比vector好(链表的特性) 特点: 存储地址不连续,动态扩展性能好 在任何位置插入删除性能好 不支持随机访问 加粗的和vector一样 assign() back() clear() empty() end() erase() front() get_allocator() insert() max_size() me

标准模板库

-------------------siwuxie095 在长期的编码中,聪明的程序员们发现:有一些代码经常碰到, 而且需求特别稳定,于是,各大公司在出售自己的 IDE 环境时, 就会把这些模板代码打包,一起销售 慢慢地,这些大公司之间就达成了某种共识,觉得应该把这些 涉及模板的通用代码进一步的统一和规范,于是,大家慢慢形 成了一套 C++ 的标准模板,就是现在所看到的标准模板库 标准模板库 标准模板库,即 Standard Template Lib,简称为 STL 标准模板库所涉及的内容非常

C++模板引出的标准模板库-----&gt;初涉

C++中模板,是相当重要的一部分,前面提到过一些基础,关于模板中需要注意的问题,会在最近整理出来,今天想说的,是由模板引出的标准模板库. 当初经常会被推荐看<STL源码剖析>这本书,听说很厉害,是C++高手都需要走过的路,可一直都不知道STL是什么,也一直忘记去查,今天整理出来的一些东西,最起码可以让未了解过这方面的童鞋认识一下. C++标准模板库,即STL:Standard Template Lib,STL的产生,是必然的.在长期的编码过程中,一些程序员发现,有一些代码经常用到,而且需求特别

C++标准库和标准模板库

C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标准头文件中定义. 在C++开发中,要尽可能地利用标准库完成.这样做的直接好处包括: (1)成本:已经作为标准提供,何苦再花费时间.人力重新开发呢: (2)质量:标准库的都是经过严格测试的,正确性有保证: (3)效率:关于人的效率已经体现在成本中了,关于代码的执行效率要相信实现标准库的大牛们的水平: (4)良好的编程风格:采用行业中普遍的做法进行开发. 一.C++标准库 C++标准库的内容分为10类, 分别是:C1.语

STL学习一:标准模板库理论基础

STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间. STL的从广义上讲分为三类:algorithm(算法).container(容器)和iterator(迭代器),容器和算法通过迭代器可以进行无缝 地连接.几乎所有的代码都采 用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会.在C++标准中,STL被组织为下面的13个头文

C++ Primer 学习笔记_14_标准模板库_bitset位集合容器

C++ Primer 学习笔记_14_标准模板库_bitset位集合容器 bitset容器是一个bit位元素的序列容器,每个元素只占一个bit位,取值为0或1,因而很节省内存空间.下图是一个bitset的存储示意图,它的10个元素只使用了两个字节的空间. 使用bitset需要声明头文件"#include <bitset>" 1.创建bitset对象 创建bitset对象时,必须要指定容器的大小.bitset对象的大小一经定义,就不能修改了.下面这条语句就定义了bitset对

C++ Primer 学习笔记_23_标准模板库_stack.

C++ Primer 学习笔记_11_标准模板库_stack.queue队列容器与priority_queue优先队列容器 1.stack堆栈 stack堆栈是一个后进先出(Last In First Out,LIFO)的线性表,插入和删除元素都只能在表的一端进行.插入元素的一端称为栈顶,而另一端称为栈底.插入元素叫入栈(Push),删除元素叫出栈(Pop).下图是堆栈示意图 堆栈只提供入栈,出栈,栈顶元素访问和判断是否为空等几种方法.采用push()方法将元素入栈:采用pop()方法出栈:采用

C++ Primer Plus 第六版 第16章 string类和标准模板库

1.string实际上是模板具体化basic_string<char> 的一个typedef,有默认参数,所以省略了初始化参数 2.size_type是一个依赖于实现的整形 string将string::npos定义为字符串的最大长度 3.string类的构造函数P656 4.对于c-风格字符串,3种输入方法:cin>>   cin.getline(),cin.get 对于string   ,2种输入方法:cin>>,getline(cin,string对象) 5.st

实验8 标准模板库STL

一.实验目的与要求: 了解标准模板库STL中的容器.迭代器.函数对象和算法等基本概念. 掌握STL,并能应用STL解决实际问题. 二.实验过程: 完成实验8标准模板库STL中练习题,见:http://acm.hpu.edu.cn/contest.php?cid=1020,密码c++08,共有5道题.将答题过程简单记录到实验过程中. 将答题结果写到实验结果中,并根据答题结果进行分析.反思,将其写到实验分析中,并写上实验时间.