STL之vector
vector
STL vector的内部实现原理及基本用法
初始化vector对象的方式:
vector
vector
vector
vector
其中:T可以为int,float,char,char*(存放字符串或字符指针)。一般用于int动态数值时,定义vector
vector的常用函数:只需要包含#include即可
empty():判断vector向量是否为为空,为空时返回真,否则返回假;
begin():返回向量(数组)的首元素的地址;
end():返回向量(数组)的末尾元素的下一个元素(不存在的元素)的地址;
clear():清空向量;
front():返回向量(数组)的第一个元素的数据;
back():返回向量(数组)的最后一个元素的数据;
size():返回向量中元素的个数(即数组长度)
push_back(数据i):将数据插入到向量的尾部;
pop_back():删除向量尾部的数据
// vector_base.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void display(int &value) {
cout << value << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
cout << "vector的基本操作:" << endl;
//vector的初始化
vector<int> money;
//赋值
for (int i = 0; i <= 10; i++)
{
money.push_back(i);
}
//使用迭代器
vector<int>::iterator ptr = money.begin();//获取向量首元素的地址
cout << "向量容器的值分别为:" << endl;
for (; ptr != money.end(); ptr++)
{
cout << *ptr << " ";
}
cout << endl;
for each (int var in money)
{
cout << var << " ";
}
cout << endl;
//判断容器是否为空
if (money.empty())
{
cout << "向量为空" << endl;
}
else
{
cout << "向量不为空" << endl;
}
cout << "向量的首元素为:" << money.front() << ";向量的最后一个元素为:" << money.back() << endl;
cout << "向量的真实大小为:" << money.size() << endl;//10个元素值+结束标记=11
cout << "向量的总大小为:" << money.max_size() << endl;
cout << "这个动态数组所能容纳的最大容量为:" << money.capacity() << endl;
money.resize(15);// 改变money的大小
cout << "change the size of money:" << money.size() << endl;
//对动态数组指定位置进行赋值
//money.assign(*(money.begin()), 8888);
cout << "money.at(0):" <<money.front()<< endl;
money.assign(1, 999); //
cout << money.at(0) << endl;
//money.erase(money.begin());//
//cout << "向量的首元素为:" << money.front() << endl;
//money.pop_back();//
//cout << "向量的最后一个元素为:" << money.back() << endl;
money.clear(); //
system("pause");
return 0;
}
vector的特点
(1) 指定一块如同数组一样的连续存储,但空间可以动态扩展。即它可以像数组一样数组一样被操作,通过[]符号。可以进行动态操作,通常体现在push_back() pop_back();
(2) 随机访问方便,它像数组一样被访问,即支持[ ] 操作符和vector.at();
(3) 节省空间,因为它是连续存储,在存储数据的区域都是没有被浪费的,但是要明确一点vector 大多情况下并不是满存的,在未存储的区域实际是浪费的;
(4) 在内部进行插入、删除操作效率非常低,这样的操作基本上是被禁止的。Vector 被设计成只能在后端进行追加和删除操作,其原因是vector 内部的实现是按照顺序表的原理;
(5) 只能在vector 的最后进行push 和pop ,不能在vector 的头进行push 和pop ;
(6) 当动态添加的数据超过vector 默认分配的大小时要进行内存的重新分配、拷贝与释放,这个操作非常消耗性能。 所以要vector 达到最优的性能,最好在创建vector 时就指定其空间大小。
deque 容器
deque
无论何时,当应用包含先入先出的事务处理时,都应该使用 deque 容器。处理数据库事务或模拟一家超市的结账队列,像这两种应用都可以充分利用 deque 容器。