定义vector对象的时候先不用指定数组的大小,有数据的话就往数组里面插入就可以了。vector内部自己管理存储空间。
vector 的头文件和命名空间:
#include <vector> //注意,没有 .h
using namespace std; //在 std 标准命名空间中
vector 的定义:
vector<int> arr_int; //定义了一个内部元素是int的动态数组;
vector<char> arr_char; //定义了一个内部元素是char的动态数组;
vector<CStudent> arr_student; //定义了一个内部元素是CStudent的动态数组;
vector<char*> arr_pchar; //定义了一个内部元素是char*的动态数组;
vector 的初始化:
#include <vector>
int main (int argc, char* argv[])
{
std::vector<int> one; //定义一个空的、元素类型是 int 的 vector 动态数组
std::vector<int> two(4,100); //定义一个包含4个元素,每个元素的值都是100的 vector 动态数组
std::vector<int> three(two.begin(),two.end()); //使用 two 这个对象的迭代器,从开始到结束的所有元素来初始化当前对象
std::vector<int> four(three); // 使用 three 这个对象来初始化当前对象
int myints[] = {16,2,77,29};
std::vector<int> five (myints, myints + sizeof(myints) / sizeof(int) ); //使用一个普通的 int 数组来初始化当前对象
return 0;
}
vector 的的常用基本操作
① arr_int[idx] 或 arr_int.at(idx) //返回动态数组中下标为 idx 的 arr_int[idx] 元素的值
② arr_int.size(); //返回 arr_int 数组元素的总个数
③ arr_int.front(); //返回 arr_int 数组的第一个元素的值
④ arr_int.back(); //返回 arr_int 数组的最后一个元素的值
⑤ arr_int.clear(); //清空 arr_int 数组,即把里面的所有元素都删除
⑥ arr_int.begin(); //返回 arr_int 数组第一个数的下标
⑦ arr_int.end(); //返回 arr_int 数组最后一个数的下标
⑧ arr_int.empty(); //判断 arr_int 数组是否为空,如果为空则返回true,非空(有元素)则返回false
⑨ arr_int.swap(v1); //v1是另一个动态数组,将 arr_int 和 v1 两个动态数组的元素互换
⑩ swap(arr_int, v1); //同⑨
使用实例
#include <vector> //注意,没有 .h
#include<iostream>
using namespace std; //在 std 标准命名空间中
int main(int argc, char* argv[])
{
int szint[5] = {1,2,3,4,5};
//vector是动态数组,是个模板,可以适用于任何类型,
//初始化
vector<int> arr_int;
vector<int> second(4,100);
vector<int> third(second);
vector<int> forth=second;
vector<int> fivth(third.begin(),third.end());
vector<int> six(szint, szint + sizeof(szint) / sizeof(int));
int a=fivth.at(2);
//插入
six.push_back(100);//在vector的最后插入100
six.insert(six.begin() + 2, 666);//在six下标为2的地方插入666
fivth.insert(fivth.begin() + 3, 3, 666);//在fivth下标为3的地方插入3个666
forth.insert(forth.begin()+2, szint, szint + sizeof(szint) / sizeof(int));//插入数组
//删除
forth.pop_back();//删除最后一个元素
fivth._Pop_back_n(3);//删除最后三个元素
forth.erase(forth.begin() + 1);//删除某个下标的元素
forth.erase(forth.begin() + 1, forth.begin() + 2);//删除某个区域的元素【),
// //前一个下标会被删除,后一个下标不会
//遍历
//下标遍历
for (int idx = 0; idx < six.size(); idx++)
{
int value = six[idx];
cout << value << ",";
}
cout << endl;
//迭代器遍历,类似于指针
vector<int>::iterator itor;
for (itor = six.begin(); itor != six.end();itor++)
{
int value = *itor;
cout << value << ",";
}
system("pause");
return 0;
}