c++中的vector容器(笔记练习)

笔记:

1.about vector

vector是可变大小数组的序列容器。同数组一样,vector也采用连续存储空间存储元素,因此可采用下标对元素进行访问。与普通数组不同的是,它的大小是可动态改变。(vector使用动态数组存储元素。)与其它动态序列容器相比(deques, lists and forward_lists), vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。

2.代码

// 第四次练习4.25start.cpp : 定义控制台应用程序的入口点。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//vector
void printVector(vector<int> &v)
{
	for (int i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
}
void play02()
{
	//1	数组元素的添加删除
	vector<int> v1;
	cout << "length:" << v1.size() << endl;
	v1.push_back(7);
	v1.push_back(2);
	v1.push_back(8);
	cout << "length:" << v1.size() << endl;
	cout << "头部元素" << v1.front() << endl;
	//修改头部元素
	//注意:函数返回值当左值应该返回一个引用
	v1.front() = 8;//将头部元素的7修改为8
	v1.back() = 3;//将尾部元素8修改为3
	while (v1.size()>0)
	{
		cout << "尾部元素" << v1.back() << endl;//获取尾部元素
		v1.pop_back();//删除尾部元素
	}
	//2	vector的初始化
	vector<int>	v2 = v1;//对象初始化
    //vector<int>	v3(v1.begin(), v1.begin() + 1);//0 1位置
	//3	vector的遍历(通过数组的方式)
	vector<int> v4(10);//提前把内存分配好
	for (int i = 0; i < 10; i++)
	{
		v4[i] = i + 1;
	}
	printVector(v4);
	//4	push_back强化记忆vector<int> v4(10);也要提前把内存分配好
	v4.push_back(100);//在动态数组的末尾添加元素
	v4.push_back(200);
	cout << "size:" << v4.size() << endl;
	printVector(v4);
	//5	对迭代器end()的理解
	//			1  2  3
	//begin()	^  
	//end()			      ^(指向3后一个位置)
	//当迭代器it==v4.end()的时候,说明这个容器已经遍历完毕
	//6	迭代器的种类
	/*
	typedef iterator pointer;
	typedef const_iterator const_pointer;
	typedef _STD reverse_iterator<iterator> reverse_iterator;
	typedef _STD reverse_iterator<const_iterator> const_reverse_iterator;
	*/

	//正向遍历
	cout << "正向遍历:";
	for (vector<int>::iterator it = v4.begin(); it != v4.end(); it++)
	{
		cout <<*it << " ";
	}
	cout << endl;
	//逆序遍历
	cout << "逆向遍历:";
	for (vector<int>::reverse_iterator rit = v4.rbegin(); rit != v4.rend(); rit++)
	{
		cout << *rit << " ";
	}
	cout << endl;
	//7	vector的删除
	//区间删除
	cout << "区间删除:";
	v4.erase(v4.begin(), v4.begin() + 3);//0 1 2位置
	printVector(v4);
	//根据元素的位置 制定位置删除
	v4.erase(v4.begin());//删除头部的一个元素;
	cout << "删除头部的一个元素:";
	printVector(v4);
	//根据元素的值删除
	v4[6] = 11;
	v4[7] = 11;
	printVector(v4);
	//注意:
	//*******************************************************************
	for (vector<int>::iterator it = v4.begin(); it != v4.end();)
	{
		if (*it == 11)
		{
			it = v4.erase(it);
			//当删除迭代器所指向的元素的时候,erase()删除函数会让it自动向后移动一个位置					
		}
		else
		{
			it++;
		}
	}
	cout << "删除11之后:";
	printVector(v4);
	v4.insert(v4.begin(), 100);
	v4.insert(v4.end(),200);
	printVector(v4);
}

int main()
{
	play02();
	system("pause");
	return 0;
}

3.总结:

vector基本操作
(1).容量
向量大小: vec.size();
向量最大容量: vec.max_size();
更改向量大小: vec.resize();
向量真实大小: vec.capacity();
向量判空: vec.empty();
(2).修改
多个元素赋值: vec.assign(); //类似于初始化时用数组进行赋值
末尾添加元素: vec.push_back();
末尾删除元素: vec.pop_back();
任意位置插入元素: vec.insert();
任意位置删除元素: vec.erase();
交换两个向量的元素: vec.swap();
清空向量元素: vec.clear();
(3)迭代器
开始指针:vec.begin();
末尾指针:vec.end(); //指向最后一个元素的下一个位置
指向常量的开始指针: vec.cbegin(); //不能通过这个指针来修改所指的内容,但还是可以通过其他方式修改的,而且指针也是可以移动的。
指向常量的末尾指针: vec.cend();
(4)元素的访问
下标访问: vec[1]; //并不会检查是否越界
at方法访问: vec.at(1); //以上两者的区别就是at会检查是否越界,是则抛出异常
访问第一个元素: vec.front();
访问最后一个元素: vec.back();

发布了66 篇原创文章 · 获赞 19 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/RitaAndWakaka/article/details/80113414