在项目中,vector使用很多很广,与其说vector使用很多不如说STL使用的很多。C++的STL库封装了常用的数据结构,它们里面又实现了一些非常实用的算法,使得STL被广泛使用,减低项目开发难度和周期。vector是线性容器,它的元素严格的按照线性序列排序,和动态数组很相似,和数组一样,它的元素存储在一块连续的存储空间中,这也意味着我们不仅可以使用迭代器(iterator)访问元素,还可以使用指针的偏移方式访问,和常规数组不一样的是,vector能够自动存储元素,可以自动增长或缩小存储空间。vector是真的很屌,可以装数据,可以装结构体,只要你能塞进去。
在完成项目或者学习的时候还是需要用代码来理解,多调试多理解函数的用法和意义,这样进步才能更快。我就是用下面的代码来试验试验Vector:
<span style="font-size:10px;">#include "stdafx.h"
#include <vector>
#include <string>
#define COUNT 5
using namespace std;
typedef struct Message
{
string protocol;
int length;
}MSG;
void printVectorInt(vector<int>::iterator iter, vector<int> v_INT)
{
printf("\n***************************************\n");
// 用迭代器来循环出值出来
for (iter = v_INT.begin(); iter < v_INT.end(); iter++)
{
printf("The v_INT value is = %d\n", *iter);
/*// erase函数只能传递iterator指针
if (*iter == 5)
{
v_INT.erase(iter);
}*/
}
printf("***************************************\n");
}
int main()
{
vector<int> v_INT;
//迭代器,可以理解为指向数据的指针
vector<int>::iterator iter;
for (size_t i = 0; i < COUNT; i++)
{
v_INT.push_back(i);
}
// 通过循环的方式来获取Vector内的内容
for (size_t i = 0; i < v_INT.size(); i++)
{
printf("The v_INT.at(%d) is = %d\n",i, v_INT.at(i));
}
printVectorInt(iter,v_INT);
// assign(),用指定元素序列替换容器内所有元素
v_INT.assign(1,10);
printVectorInt(iter,v_INT);
// 清空
v_INT.clear();
// 塞结构体进去
vector<MSG> v_ST;
MSG msg;
msg.length = 0x10AB;
msg.protocol = "TCP";
v_ST.push_back(msg);
// 检查是不是空
if (!v_ST.empty())
{
// 因为只装载了1个,所以直接就取0了
string prot = v_ST.at(0).protocol;
int len = v_ST.at(0).length;
printf("\n---------------------------------------\n");
printf("The protocol is = %s\n",prot.c_str());
printf("The length is = 0x%x", len);
printf("\n---------------------------------------\n");
}
system("pause");
return 0;
}</span>
下面是打印:
vector还有其他的很多函数,具体的用法可以根据项目的需要再查找和使用。
比如逆序啊,插入值啊,删除啊那些函数,可以自己多实现,多写多调试,这样印象才深刻。