将vector的基本使用方法总结,便于日后回顾。
#include "stdafx.h"
#include <time.h>
#include <vector>
#include <iostream>
// Vector 插入数据方法
vector<int> vecotrInsert()
{
vector<int> v(10); // 初始化一个元素个数为10个,默认值均为0的vector
vector<int> v1(10, 99); // 初始化一个元素个数为10个,默认值均为99的vector
// 第一种插入方式:push_back
v.push_back(278); // 在vector元素之后,添加一个值为278的元素。
// 第二种插入方式:insert
v.insert(v.begin(), v1.begin(), v1.end()); // 在原vecotr的元素之前,插入10个值为99的元素。
v.insert(++v.begin(), 3, 255); // 在第一个元素之后,插入3个值为255的元素。
v.insert(v.begin(),54); // 在第一个元素之前,插入一个值为54的元素。
return v;
}
// Vector 三种push_back数据效率对比
void vectorPushData()
{
int i = 0;
clock_t start = clock(); // 获取当前时钟
for (; i < 1000; i++)
{
vector<int> v;
for (int j = 0; j < 100; j++)
{
v.push_back(j);
}
}
cout << "直接push数据耗时:" << clock() - start << endl;
start = clock();
for (i = 0; i < 1000; i++)
{
vector<int> v;
v.resize(100); // 预选分配容器大小
for (int j = 0; j < 100; j++)
{
v.push_back(j);
}
}
cout << "先分配元素个数,再push数据耗时:" << clock() - start << endl; // 效率高于直接push。
start = clock();
for (i = 0; i < 1000; i++)
{
vector<int> v;
v.reserve(100); // 预选分配100个存储空间
for (int j = 0; j < 100; j++)
{
v.push_back(j);
}
}
cout << "先分配元素存储空间,再push数据耗时:" << clock() - start << endl; // 效率与使用v.resize()基本一致
}
// Vecotr 迭代器遍历
void VecotrIterator(vector<int> ver)
{
if (ver.empty())
return;
vector<int>::iterator iter = ver.begin();
for (; iter != ver.end(); iter++)
{
cout << "前向迭代器,输出内容:" << *iter << endl;
}
vector<int>::reverse_iterator revIter = ver.rbegin();
for (; revIter != ver.rend(); revIter++)
{
cout << "逆向迭代器,输出内容:" << *revIter << endl;
}
}
// Vecotr 数组方式使用
void vectorArrayMode()
{
int iSize = 10000;
vector<int> v(iSize); // 定义一个长度为iSize的vector,同时默认值被设置后为0(算术和数值型缺省值为定义为0)
if (!v.empty())
cout << "v value:" << v[100] << endl;
vector<int> v1(iSize, 999); // 定义长度为iSize的vector,同时指定默认值为999
cout << "v1 value:" << v1[200] << endl;
int iArray[6] = {1,2,3,4,5,6};
vector<int> v2(iArray, iArray + 6); // 使用数组的元素来初始化vector
for (int i = 0; i < 6; i++)
{
cout << "数组方式输出内容:" << v2[i] << endl; // 使用下标遍历
}
}
// Vector 删除数据方法
template <class T>
void vecotrErase(vector<T> ver)
{
if (ver.empty())
return;
// 第一种删除方法
ver.erase(ver.begin()); // 删除指定迭代器所指向的元素。
ver.erase(ver.begin(), --ver.end()); // 删除指定返回内的元素。
// 第二种删除方法
ver.pop_back(); // 删除末尾的元素。
cout << "ver size:" << ver.size() << endl; // 输出 ver size:0
}
// 释放vector的存储空间,局部变量随函数执行完成而释放掉。
template <class T>
void ReleaseMemory(vector<T>& ver)
{
vector<T> verTamp;
verTamp.swap(ver);
verTamp.clear(); // 只会清除掉数据,但占用内存不会释放
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> v; // 申明了一个空的vector, 元素个数为0
//v[0] = 1024; // 空vecotr,不能通过下标访问,此处会执行错误
vectorPushData(); // 比较三种push的效率
v = vecotrInsert(); // insert数据的方式
cout << "最大存储的元素个数:" << v.max_size() << endl;
VecotrIterator(v); // 迭代器使用
vecotrErase(v); // 删除
vectorArrayMode(); // 数组方式初始化和遍历
v.clear(); // 清除vector元素,但是不会释放内存。
ReleaseMemory(v); // 使用局部变量方式释放内存。
system("pause");
return 0;
}