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 容器。
参考资料:https://blog.csdn.net/ye1223/article/details/79772771
来源:https://www.cnblogs.com/xzj8023tp/p/11432256.html