C++STL vector容器 基本概念 构造函数 赋值操作 容量和大小

文章目录

  • 1 vector基本概念
  • 2 vector构造函数
  • 3 vector赋值操作
  • 4 vector容量和大小

1 vector基本概念

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

vector与普通数组区别: 数组是静态空间,而vector可以动态扩展。数组在初始化时,一旦分配了内存就不能再扩展了,但是vector却可以。例如,数组arr[5],就只能存放5个数据,不能再次扩展。vector一开始指定了5个容量,如果想再加新数据的话,还可以再次动态扩展容量。

动态扩展: 并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。也就是说,vector的动态扩展是找一个内存更大的新空间并拷贝原数据,再释放原内存空间
C++STL vector容器 基本概念 构造函数 赋值操作 容量和大小_第1张图片
vector容器的迭代器是支持随机访问的迭代器
C++STL vector容器 基本概念 构造函数 赋值操作 容量和大小_第2张图片
可以看到vector是左闭右开的容器,常用的迭代器是v. begin() 和v.end(),前者指向第一个元素,后者指向最后一个元素的下一个位置。vector容器还封装了很多对外接口,比如插值insert()、尾插法push_back()、尾删法pop_back()等等。

2 vector构造函数

功能描述: 创建vector容器

函数原型:

  • vector v; ——————————采用模板实现类实现,默认构造函数
  • vector(v.begin(), v.end()); ————–将v [ begin(), end() ) 区间中的元素拷贝给本身,注意拷贝的元素是左闭右开区间。
  • vector(n, elem);—————————构造函数将n个elem拷贝给本身。
  • vector(const vector &vec);—————拷贝构造函数。

代码示例:

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

//vector容器构造
void test1()
{
	vector<int> v1;//默认构造 无参构造
	for (int i = 0; i < 10; ++i)
	{
		v1.push_back(i);
	}
	cout << "v1:"; printVector(v1); cout << endl;

	vector<int> v2(v1.begin(), v1.end());//将v [ begin(), end() ) 区间中的元素拷贝给本身
	cout << "v2:"; printVector(v2); cout << endl;

	vector<int> v3(10, 6);//构造函数将n个elem拷贝给本身 10个6
	cout << "v3:"; printVector(v3); cout << endl;

	vector<int> v4(v3);//拷贝构造函数
	cout << "v4:"; printVector(v4); cout << endl;
}

C++STL vector容器 基本概念 构造函数 赋值操作 容量和大小_第3张图片
总结: vector的多种构造方式没有可比性,灵活使用即可

3 vector赋值操作

功能描述: 给vector容器进行赋值

函数原型:

  • vector& operator=(const vector &vec);————-重载等号操作符
  • assign(beg, end);————————————将[beg, end)区间中的数据拷贝赋值给本身。
  • assign(n, elem);————————————-将n个elem拷贝赋值给本身。

代码示例:

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

//vector容器构造
void test1()
{
	vector<int> v1;//默认构造 无参构造
	for (int i = 0; i < 10; ++i)
	{
		v1.push_back(i);
	}
	cout << "v1:"; printVector(v1); cout << endl;

	//赋值 operator=
	vector<int> v2;
	v2 = v1;//重载等号= 操作符
	cout << "v2:"; printVector(v2); cout << endl;

	//赋值 assign 这不是构造 是赋值
	vector<int> v3;
	v3.assign(v1.begin(), v1.end());//将[beg, end)区间中的数据拷贝赋值给本身。
	cout << "v3:"; printVector(v3); cout << endl;

	//赋值 assign 这不是构造 是赋值
	vector<int> v4;
	v4.assign(10, 100);//将n个elem拷贝赋值给本身。
	cout << "v4:"; printVector(v4); cout << endl;
}

C++STL vector容器 基本概念 构造函数 赋值操作 容量和大小_第4张图片
总结: vector赋值方式比较简单,使用operator=,或者assign都可以

4 vector容量和大小

功能描述: 对vector容器的容量和大小操作

函数原型:

  • empty(); ————————–判断容器是否为空,空返回true,不为空返回false

  • capacity();————————容器的容量,capacity≥size

  • size();—————————–返回容器中元素的个数,capacity≥size

  • resize(int num);——————重新指定容器的长度为num,若容器变长,则以默认值0填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。

  • resize(int num, elem);————重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除

代码示例:

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

//vector容器构造
void test1()
{
	vector<int> v1;//默认构造 无参构造
	for (int i = 0; i < 10; ++i)
	{
		v1.push_back(i+1);
	}
	cout << "v1:"; printVector(v1);

	if (v1.empty())
	{
		cout << "容器为空!" << endl;
	}
	else
	{
		cout << "容器不为空!" << endl;
		cout << "容器的容量为:" << v1.capacity() << endl;
		cout << "容器的大小为:" << v1.size() << endl;
	}
	cout << string(50, '-') << endl;

	//重新指定大小  比原来长
	v1.resize(12);//默认值0 填充
	cout << "v1:"; printVector(v1); cout << endl;
	cout << string(50, '-') << endl;

	v1.resize(15, 1);//指定值1 填充
	cout << "v1:"; printVector(v1); cout << endl;
	cout << string(50, '-') << endl;

	//重新指定大小  比原来短
	v1.resize(10);//把超出的部分删除
	cout << "v1:"; printVector(v1); cout << endl;
	cout << string(50, '-') << endl;
}

C++STL vector容器 基本概念 构造函数 赋值操作 容量和大小_第5张图片
总结:

  • 判断是否为空 — empty
  • 返回元素个数 — size
  • 返回容器容量 — capacity
  • 重新指定大小 — resize

你可能感兴趣的:(C++,泛型编程,语法学习笔记,c++)