vector容器会了吗?一文搞定它

赋值操作

#include<iostream>
#include <vector>
using namespace std;
void print(vector<int>& v)
{
    
    
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
    
    
		cout << *it << " ";
	 }
	cout << endl;
}

它是动态扩展,找一块新的更大的空间,把原来的数据拷贝到这,释放原来的空间

//1.赋值操作
/*

  • 函数模型:
  • vector& operator=(const vector& dep)
  • 重载=运算符
  • assign(beg,end);
  • 将beg,end之间的数据拷贝给自身
  • assign(n,elem);
  • 将n个elem拷贝赋值给本身
    /
    /
void test01()
{
    
    
	vector<int>v;
	vector<int>v1;
	vector<int>v2;
	for (int i = 0; i < 10; i++)
	{
    
    
		v.push_back(i);
	}
	print(v);
	v1 = v;
	//直接赋值法
	print(v1);

	v2.assign(v.begin(), v.end());
	//assign 赋值
	print(v2);

	//n个元素方式赋值
	vector<int>v3;
	v3.assign(10, 100);//打印10个100
		print(v3);
}

容量和大小

//2.容量和大小

/*

  • 函数原型:
    empty()
    判断容器是否为空
    capacity()
    容器的容量
    size()
    返回容器中元素的个数
    resize(int num)
    重新指定容器的长度为num,
    如果容器变长则以默认值填充新位置
    如果容器变短,则末尾超过容器长度的元素删除
    resize(int num,elem)
    重新指定容器的长度为num,
    如果容器变长则以elem值填充新位置
    如果容器变短,则末尾超过容器长度的元素删除
    /
    /
void test02()
{
    
    
	vector<int>v1;
	for (int i = 0; i < 10; i++)
	{
    
    
		v1.push_back(i);
	}
	print(v1);
	if (!v1.empty() )
		cout << "buweikong" << endl;
	cout << "v1的容量大小:" << v1.capacity() << endl;
	cout << "v1的大小:" << v1.size() << endl;
	
	v1.resize(12,20);
	print(v1);
}

插入和删除操作

//3.插入和删除操作
/*

  • 函数原型
    push_back(elem);
    尾部插入元素elem
    pop_back();
    删除最后一个元素
    insert(const_iterator pos,elem);
    迭代器指向位置pos插入元素elem
    insert(const_iterator pos,int cout,elem);
    迭代器指向位置pos插入cout个元素elem
    erase(const_iterator pos);删除迭代器指向的元素
    erase(const_iterator start,const_iterator end);
    删除迭代器从start到end之间的元素
    clear();
    删除容器中所有元素
    */

数据存取

//4.数据存取
/*
函数原型:
at(int idx);
返回索引idx所指的数据
operator[]
返回索引idx所指的数据
front();
返回容器中第一个数据元素
back();
返回容器中最后一个数据元素
/
/

void test04()
{
    
    
	vector<int>v4;
	for (int i = 0; i < 1000; i++)
	{
    
    
		v4.push_back(i);
		//利用at访问元素	
		//cout << v4.at(i) << endl;
		//cout << v4[i] << endl;
	}
	int n=v4.back();
	//print(v4);
	cout <<"最后一个元素:" << n << endl;
	n = v4.front();
	cout <<"第一个元素:" << n << endl;

互换容器

//函数模型:swap(vex)
vector<int>v5;
	v5.swap(v4);
	

	//print(v5);
	//print(v4);//因为v5是空,所以交换之后不进入for循环,打印一个换行
	//巧用swap()可以收缩内存空间
	cout << "v4的容量是:" << v4.capacity() << endl;
	cout << "v5的容量是:" << v5.capacity() << endl;
	cout << "v5的大小是:" << v5.size() << endl;
	v5.resize(3);//改变了大小,但是容量没有改变,所以浪费了
	cout << "v5的容量是:" << v5.capacity() << endl;
	cout << "v5的大小是:" << v5.size() << endl;

	//巧用swap收缩
	vector<int>(v5).swap(v5);
	cout << "v5的容量是:" << v5.capacity() << endl;
	cout << "v5的大小是:" << v5.size() << endl;
	//vector<int>(v5)匿名对象 利用拷贝函数构造新的对象
	//swap(v5);      容器的交换,相当于指针进行交换,交换完之后,匿名对象会自动销毁(销毁原来的1000)

}

vector预留空间

void test06()
{
    
    
	vector<int>v;
	//预留空间
	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++;
		}
}
	cout << "重新开辟次数:" << num << endl;
}


int main()
{
    
    
	//test01();
	//test02();
	//test04();
	test06();
	system("pause");
	return 0;
}

此外如果大家有购书需求,欢迎大家考虑一下清华社,直接以最低的价格买到最好的书!

详情链接添加链接描述

在这里插入图片描述

618,清华社 IT BOOK 多得图书活动开始啦!活动时间为 2023 年 6 月 7 日至 6 月 18 日,
清华社为您精选多款高分好书,涵盖了 C++、Java、Python、前端、后端、数据库、算法与机器学习等多个 IT 开发领域,适合不同层次的读者。全场 5 折,扫码领券更有优惠哦!
快来京东点击链接 IT BOOK 多得(或扫描京东二维码)查看详情吧!

猜你喜欢

转载自blog.csdn.net/2202_75623950/article/details/131131915