c++中关于vector容器的各种函数介绍

c++中关于vector容器的各种函数介绍

c++中关于vector容器的各种函数介绍

头文件:

#include < vector >

先构造一个遍历vector所有元素的函数:

void printvector(vector& v) {

for (vector::iterator it = v.begin(); it != v.end(); it++) {

cout << *it << " ";

}

cout << endl;

}

一、vector容器构造函数:

函数原型:

vector< T > v ;

采用横板实现类实现,默认构造函数

vector(v.begin(), v.end());

将v[begin(),end()]区间中的元素拷贝给本身

vector(n,elem);

构造函数将n个elem拷贝给本身

vector(const vector &vec);

拷贝构造函数

void test01() {

//vector容器构造

vector v1;//默认构造,无参构造

for (int i = 0; i < 10; i++) {

v1.push_back(i);

}

printvector(v1);

//第二种:通过区间方式进行构造:

vectorv2(v1.begin(), v1.end());

printvector(v2);

//第三种:n个elem方式构造

vectorv3(10, 100);//相当于构造了10个100

printvector(v3);

//第四种:拷贝构造

vectorv4(v3);

printvector(v4);

}

二、vector赋值操作

函数原型:

vector& operator = (const vector &vec);

重载等号操作符assign(beg, end);//将(beg,end)

区间中的数据拷贝赋值给本身assign(n,elem);

将n个elem拷贝赋值给本身

void test02() {

//先构造

vectorv1;

for (int i = 0; i < 10; i++) {

v1.push_back(i);

}

printvector(v1);

//赋值: operator =

vectorv2;

v2 = v1;

printvector(v2);

//assign

vectorv3;

v3.assign(v1.begin(), v1.end());//注意区间是前闭后开

printvector(v3);

//n个elem方式赋值

vectorv4;

v4.assign(10, 100);

printvector(v4);

}

三、vector容器和大小:

函数原型:

empty();

判断容器是否为空;capacity();

容器的容量;size();

返回容器中元素的个数;resize(int num);

重新指定容器的长度为num。若容器变长,则以默认值填充新位置;

如果容器变短,则末尾超出容器长度的元素被删除resize(int num, elem);

重新指定容器的长度为num,若容器变长,则以elem值填充新位置

如果容器变短,则末尾超出容器长度的元素被删除

void test03() {

vectorv1;

for (int i = 0; i < 10; i++) {

v1.push_back(i);

}

printvector(v1);

//判断是否为空:

if (v1.empty()) {//为真,表示容器为空

cout << "v1为空" << endl;

}

else {

cout << "v1不为空" << endl;

cout << "v1的容量为:" << v1.capacity() << endl; //注意返回的是容器大小

cout << "v1的大小为:" << v1.size() << endl; //注意返回的是所存内容的多少

}

//重新指定大小:

v1.resize(15);//默认用0来填充比原来长的部分

printvector(v1);

v1.resize(20, 100);//可以用自定义的值来填充比原来长的部分

printvector(v1);

v1.resize(5);//长于现在的部分全部被delete

printvector(v1);

}

四、vector的插入和删除:

函数原型:

push_back(elem);

在尾部插入元素elempop_back();

删除最后一个元素insert(const_iterator pos, elem);

迭代器指向位置pos插入元素eleminsert(const_iterator pos, int count, elem);

迭代器指向位置pos插入count个元素elemerase(const_iterator pos);

删除迭代器指向的元素erase(const_iterator start, const iterator end);

删除迭代器从start到end之间的元素clear();

删除容器中所有的元素

void test04() {

vectorv1;

//尾插;

v1.push_back(10);

v1.push_back(20);

v1.push_back(30);

v1.push_back(40);

v1.push_back(50);

//遍历:

printvector(v1);

//尾删:

v1.pop_back();

printvector(v1);

//头部插入:

v1.insert(v1.begin(), 100);

v1.insert(v1.begin(), 3, 5);

printvector(v1);

//删除:

v1.erase(v1.begin());

printvector(v1);

cout << "最后一步" << endl;

//清空:

v1.erase(v1.begin(), v1.end());

printvector(v1);

}

五、vector容器中的数据存取:(主要是“取”)

函数原型:

at(int idx);

返回索引idx所指的数据operator[];

返回索引idx所指的数据front();

返回容器中第一个数据元素back();

返回容器中最后一个数据元素

void test05() {

vectorv1;

for (int i = 0; i < 10; i++) {

v1.push_back(i);

}

//利用中括号的方式访问数组中的元素:

for (int i = 0; i < v1.size(); i++) {

cout << v1[i] << " ";

}

cout << endl;

//利用at的方式访问元素:

for (int i = 0; i < v1.size(); i++) {

cout << v1.at(i) << " ";

}

cout << endl;

//获取第一个元素:

cout << "第一个元素为: " << v1.front() << endl;

//获取最后一个元素:

cout << "最后一个元素为: " << v1.back() << endl;

}

六、vector互换容器:

函数原型:

swap(vec);

将vec与本身的元素互换

//1.基本使用:

void test06() {

//容器互换前:

cout << "交换前" << endl;

vectorv1;

for (int i = 0; i < 10; i++) {

v1.push_back(i);

}

cout << "v1: ";

printvector(v1);

vectorv2;

for (int i = 10; i > 0; i--) {

v2.push_back(i);

}

cout << "v2: ";

printvector(v2);

cout << "交换后" << endl;

v1.swap(v2);

cout << "v1: ";

printvector(v1);

cout << "v2: ";

printvector(v2);

}

//2.实际用途:

//巧用swap可以收缩内存空间;

void test07() {

vectorv;

for (int i = 0; i < 100000; i++) {

v.push_back(i);

}

cout << "v的容量为: " << v.capacity() << endl;

cout << "v的大小为: " << v.size() << endl;

v.resize(3);

cout << "v的容量为: " << v.capacity() << endl;

cout << "v的大小为: " << v.size() << endl;

//巧用swap收缩内存:

vector(v).swap(v); //vector(v)//这是一个匿名对象

//.swap(v)就是做了一次容器交换

cout << "v的容量为: " << v.capacity() << endl;

cout << "v的大小为: " << v.size() << endl;

}

七、vector容器-预留空间

函数原型:

reserve(int len);

容器预留len个元素长度,预留位置不初始化,元素不可访问

void test08() {

vectorv;

int num = 0;//统计开辟次数

int* p = NULL;

for (int i = 0; i < 1000; i++) {

v.push_back(i);

if (p != &v[0]) {

p = &v[0];

num++;

}

}

cout << "reserve前:" << num << endl;

//利用reserve预留空间:

num = 0;

vector v1;

v1.reserve(1000);

int* p1 =NULL;

for (int i = 0; i < 1000; i++) {

v1.push_back(i);

if (p1 != &v1[0]) {

p1 = &v1[0];

num++;

}

}

cout << "reserve后:" << num << endl;

}

📌 相关推荐