说到C++的容器,我想第一个问题就是什么是容器,为什么要使用容器,若真非要用容器,那怎么使用呢?能想到这些问题,至少证明大家都有很强的探究精神。
目录:
何为容器?又为何需要容器
首先,学过C语言肯定知道咱们数据结构从物理结构上来说主要是:顺序存储和链式存储。但是,为了很好的利用红黑树结构,我们主要引入了关联容器。关联容器的特点是,一定有一个键和值相对应,有可能是唯一对应的,那么就是我们的map和set,不允许有重复的记录;也可以不唯一,有multimap
和 multiset
。
- 斜体 Ctrl + I
容器之增加元素
1、vector增加元素
vector的增加可以有insert
和push_back
两种:
iterator insert(iterator loc, const TYPE &val);
在指定位置loc 前 插入值val的元素,返回指向这个元素的迭代器
void insert(iterator loc, size_type num, const TYPE &val);
在指定位置loc 前 插入num个值为val的元素
void insert(iterator loc,input_iterator start,input_iterator end);
在指定位置loc前
插入区间[start ,end)的所有元素,其中,start和end也可以是数组和指针
2、map增加元素
map的增加有三种方法:
①insert
函数插入pair数据,
②insert
函数插入value_type数据
③数组
方式插入数据
其中,只有以数组方式插入,可以覆盖以前key所对应的value值;但前两者可以通过返回值判断是否插入成功,①和②的返回值类型为:pair<map<int,string>::iterator,bool>
。
3、set增加元素
(1) 插入vaule,且不能和set容器内元素重复,返回pair对
pair<iterator,bool> insert(value);
(2)在pos位置之 前
插入,返回新元素位置,但不一定插入成功
iterator insert(iterator pos, value);
若插入不成功,依然返回一个游标,但是不属于set容器。
(3)在迭代区间[first,last)内所有的元素,插入到set容器
void insert(iterator first, iterator last);
小结
从上面的的不同增加方式来看,vector的增加和插入位置有关,而map和set因为插入后会重新排序,所以一般支持直接插入。
代码块
实现代码如下:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//自定义打印函数
void print(vector<int> v)
{
for_each(v.begin(),v.end(),p);
cout << endl;
}
//主函数
int main(int argc, char *argv[])
{
vector<int> iv;
int b[] = {11,12,13};
iv.insert(iv.end(),5); //vector插入方法1
print(iv);
iv.insert(iv.begin(),6,6); //vector插入方法2
print(iv);
iv.insert(iv.end(),b,b+2); //vector插入方法3
print(iv);
return 0;
}
>>> 5
6 6 6 6 6 6 5
6 6 6 6 6 6 5 11 12
[1]:徐晓鑫 《后台开发核心技术与应用实践》
[2]:Stephen Prata 《C++ Primer Plus》