(C++)vector 容器基础知识

这里写目录标题

  • 3.2 vector容器
    • 3.2.1 vector基本概念
    • 3.2.2 vector构造函数
    • 3.2.3 vector 赋值操作
    • 3.2.4 vector容量和大小
    • 3.2.5 vector插入和删除
    • 3.2.6 vector 数据存取
    • 3.2.7 vector互换容器
    • 3.2.8 vector预留空间

————————————————————————————————————————

3.2 vector容器

3.2.1 vector基本概念

功能:

vector 数据结构和数组非常相似,也称为单端数组

vector 与普通数组区别:

不同之处在于数组是静态空间,而vector可以动态扩展

(C++)vector 容器基础知识_第1张图片

动态扩展:

并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间

vector容器的迭代器是支持随机访问的迭代器。

3.2.2 vector构造函数

	函数原型:
	
	vector<T> v;					//采用模板类实现类实现,默认构造函数
	vector(v.begin(), v.end());		//将区间中的元素拷贝给本身
	vector(n,elem);					//构造函数将n个elem拷贝给本身
	vector(const vector &vec);		//拷贝构造函数
	
—————————————————————————————————————————————————————————————————————————————————————————————

#include 
#include 
using namespace std;
#include 

void printVector(vector<int>&v)
{
     
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
     
		cout << *it << " ";
	}
	cout << endl;
}
void test01()
{
     
	vector<int>v1;

	for(int i = 0; i < 10; i++)
	{
     
		v1.push_back(i);
	}
	printVector(v1);

	//通过区间的方式进行构造
	vector<int> v2(v1.begin(), v1.end());
	printVector(v2);

	//
	vector<int>v3(10,100);
	printVector(v3);

	//
	vector<int>v4(v3);
	printVector(v4);
}
int main()
{
     
	test01();
	system("pause");
	return 0;
}

3.2.3 vector 赋值操作


	函数原型:
	
	vector & operator= (const vector &vec);		//重载等号操作符
	assign(beg, end);							//将区间中的数据拷贝赋值给本身
	assign(n, elem);							//将n个elem拷贝赋值给本身

—————————————————————————————————————————————————————————————————————————————————————————————

#include 
#include 
using namespace std;
#include 

void printVector(vector<int>&v)
{
     
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
     
		cout << *it << " ";
	}
	cout << endl;
}
void test01()
{
     
	vector<int>v1;

	for(int i = 0; i < 10; i++)
	{
     
		v1.push_back(i);
	}
	printVector(v1);

	//
	vector<int>v2;
	v2 = v1;
	printVector(v2);

	//
	vector<int>v3;
	v3.assign(v1.begin(), v1.end());
	printVector(v3);

	//
	vector<int>v4;
	v4.assign(10,100);
	printVector(v4);
}
int main()
{
     
	test01();
	system("pause");
	return 0;
}

3.2.4 vector容量和大小


函数原型:
	empty();					//判断容器是否为空
	capacity();					//容器的容量
	size();						//返回容器中元素的个数
	resize(int num);			//重新指定容器的长度为num, 若容器变长, 则以默认值填充新位置
								//如果容器变短, 则末尾超出容器长度的元素被删除
	resize(int num, elem);		//重新指定容器的长度为num, 若容器变长, 则以elem值填充新位置
								//如果容器变短, 则末尾超出容器长度的元素被删除
								
—————————————————————————————————————————————————————————————————————————————————————————————

#include 
#include 
using namespace std;
#include 

void printVector(vector<int>&v)
{
     
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
     
		cout << *it << " ";
	}
	cout << endl;
}
void test01()
{
     
	vector<int>v1;

	for(int i = 0; i < 10; i++)
	{
     
		v1.push_back(i);
	}
	printVector(v1);

	if(v1.empty())
	{
     
		cout << "Empty" <<endl;
	}
	else
	{
     
		cout << "Capacity = "<< v1.capacity()<< endl;
		cout << "Size = " << v1.size() << endl;
	}

	//重新指定大小,过长时默认用0填充
	//也可以指定数字填充
	v1.resize(15,100);
	printVector(v1);

	v1.resize(5);
	printVector(v1);
}
int main()
{
     
	test01();
	system("pause");
	return 0;
}

3.2.5 vector插入和删除


函数原型:

	insert(const_iterator pos, ele);					//迭代器指向位置pos插入元素ele
	insert(const_iterator pos, int count, ele);			//迭代器指向位置pos插入count个元素ele
	erase(const_iterator pos);							//删除迭代器指向的元素
	erase(const_iterator start, const_iterator end);	//删除迭代器从start到end之间的元素
	clear();											//删除容器中所有元素
	
—————————————————————————————————————————————————————————————————————————————————————————————

#include 
#include 
using namespace std;
#include 

void printVector(vector<int>&v)
{
     
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
     
		cout << *it << " ";
	}
	cout << endl;
}
void test01()
{
     
	vector<int>v1;

	for(int i = 0; i < 10; i++)
	{
     
		v1.push_back(i);
	}

	printVector(v1);

	v1.pop_back();
	printVector(v1);

	//第一个参数是迭代器
	v1.insert(v1.begin(), 100);
	printVector(v1);

	v1.insert(v1.begin(), 2, 199);
	printVector(v1);

	v1.erase(v1.begin());
	printVector(v1);

	v1.clear();
	//v1.erase(v1.begin(),v1.end());
	printVector(v1);
}
int main()
{
     
	test01();
	system("pause");
	return 0;
}

3.2.6 vector 数据存取


函数原型:

	at(int idx);		//返回索引idx所指的数据
	operator[];			//返回索引idx所指的数据
	front();			//返回容器中第一个数据元素
	back();				//返回容器中最后一个数据元素

—————————————————————————————————————————————————————————————————————————————————————————————
#include 
#include 
using namespace std;
#include 


void test01()
{
     
	vector<int>v;
	
	for (int i = 0; i < 10; i++)
	{
     
		v.push_back(i);
	}

	for (int i = 0; i < v.size(); i++)
	{
     
		cout << v[i] << " ";
	}
	cout << endl;

	for (int i = 0; i < v.size(); i++)
	{
     
		cout << v.at(i) << " ";
	}
	cout << endl;
}
int main()
{
     
	test01();
	system("pause");
	return 0;
}

3.2.7 vector互换容器


#include 
#include 
using namespace std;
#include 

void printVector(vector<int> &v)
{
     
	for (vector<int>::iterator it = v.begin();it != v.end(); it++)
	{
     
		cout << *it << " ";
	}
	cout << endl;
}
//1.基本操作
void test01()
{
     
	vector<int>v1;

	for(int i = 0; i < 10; i++)
	{
     
		v1.push_back(i);
	}
	printVector(v1);

	vector<int>v2;
	for(int i = 10; i > 0; i--)
	{
     
		v2.push_back(i);
	}
	printVector(v2);

	cout << "After Swap:" << endl;
	v1.swap(v2);
	printVector(v1);
	printVector(v2);
}

//2.实际用途
//巧用swap可以收缩内存空间
void test02()
{
     
	vector<int>v;
	for(int i = 0; i < 100000; i++)
	{
     
		v.push_back(i);
	}

	cout << " v's capacity :" << v.capacity() << endl;
	cout << " v's size :"	<< v.size() << endl;

	v.resize(3);
	//cout << "After resize capacity : " << v.capacity() << endl;
	//cout << "After resize size : " << v.size() << endl;

	vector<int>(v).swap(v);
	/*
	1.创建了一个匿名对象
	2.匿名对象的容量是以原本的v当前使用大小来创建
	3.然后匿名对象与v实现swap
	4.成功实现内存收缩
	5.原本的匿名对象所占内存被系统回收
	*/
	cout << "After swap capacity : " << v.capacity() << endl;
	cout << "After swap size : " << v.size() << endl;

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

3.2.8 vector预留空间

#include 
#include 
using namespace std;
#include 


void test01()
{
     
	vector<int>v;

	//利用reserve预留空间
	//若不预留空间,则要开辟30次内存空间
	v.reserve(100000);

	int num = 0;
	int *p = NULL;
	for(int i = 0; i < 100000; i++)
	{
     
		v.push_back(i);

		if(p != &v[0])
		{
     
			p = &v[0];
			num ++;
		}
		//在开辟新内存空间的时候,将指针指向新内存空间容器的头部
		//然后使num+1来统计开辟内存空间的次数
	}

	cout << "num = " << num << endl;
}
int main()
{
     
	test01();
	system("pause");
	return 0;
}

你可能感兴趣的:(C++学习笔记)