引用头文件
#include <vector>
一、操作数据
主要有下列几种方式:
vector<int> vecSalary;
//1.直接添加
vecSalary.push_back(2000);
vecSalary.push_back(3000);
//2.按位置添加
vecSalary.insert(vecSalary.begin(), 1000);
vecSalary.insert(vecSalary.end(), 4000);
//删除vector容器中的前三个元素
vecSalary.erase(vecSalary.begin(), vecSalary.begin() + 3);
//清空数据
vecSalary.clear();
二、使用说明
1)容器中保存的是指针对象,这需要使用完毕后,释放这些指针所指向的对象
vector<Employee*> vecEmployee;
//操作容器数据
...
//使用完后,释放指针对象
for (vector<Employee*>::iterator it = vecEmployee.begin(); it != vecEmployee.end(); ++it)
{
if (NULL != *it)
{
delete *it;
}
*it = NULL;
}
2)使用迭代器删除容器中的数据元素需谨慎
vector.erase(pos) :vector删除位置为pos的值
此时为保持容器内存连续性,vector后面的元素会自动向前移动一个位置,迭代器这时候实际指向的是被删除元素后的第一个元素。
中间跳过了一个元素,这就很可能造成漏掉某些元素的检查而导致删除不完全。
正确删除方式
for (vector<int>::iterator it = vecSalary.begin(); it != vecSalary.end();)
{
//遇到符合条件的删除
if (*it > 1000)
{
it = vecSalary.erase(it);
}
else
{
++it;
}
}
3) vector中的Class 按自己要求排序
#include "stdafx.h"
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
class student
{
public:
student(int a, string b):nID(a), strName(b)
{
}
int nID;
string strName;
};
bool OrderByDesc(const student& s1, const student& s2)
{
return s1.nID < s2.nID;
}
int _tmain(int argc, _TCHAR* argv[])
{
student s1(2, "s1");
student s2(1, "s2");
student s3(4, "s3");
student s4(3, "s4");
vector<student> vecStu;
vecStu.push_back(s1);
vecStu.push_back(s2);
vecStu.push_back(s3);
vecStu.push_back(s4);
sort(vecStu.begin(), vecStu.end(), OrderByDesc);
return 0;
}
///
附加 :C++0x中for_each()算法遍历
typedef vector<int> VEC_INT;
void printInt(int &it)
{
if (it % 5 == 0)
{
cout<<it<<" ";
}
}
int _tmain(int argc, _TCHAR* argv[])
{
VEC_INT vecInt;
int i = 1;
for (int i = 1; i < 100; ++i)
{
vecInt.push_back(i);
}
for_each(vecInt.begin(),vecInt.end(), printInt);
return 0;
}