C++STL容器的学习

C++STL容器的学习

文章是本人在学习STL过程中的学习过程,在CSDN上记录一下,为了防止自己忘记,同时也给查资料的人提供一点帮助

1、Vector容器

vector容器,相当于一个动态数组,里面集成了很多对数组的操作,比如说遍历,查找,插入,删除等等操作。重要的是不需要我们定义在栈上时就限定数组的大小,也不需要我们定义在堆上不断的扩充动态数组的大小。使用起来比较方便。

1.1 vector容器的基本用法

std::vector<int> v;	//创建一个vector容器
v.capacity();  //容器容量
v.size();      //容器大小
v.at(int idx); //用法和[]运算符相同
v.push_back(); //尾部插入
v.pop_back();  //尾部删除
v.front();     //获取头部元素
v.back();      //获取尾部元素
v.begin();     //头元素的迭代器
v.end();       //尾部元素的迭代器
v.insert(pos,elem); //pos是vector的插入元素的位置
v.insert(pos, n, elem) //在位置pos上插入n个元素elem
v.insert(pos, begin, end);
v.erase(pos);   //移除pos位置上的元素,返回下一个数据的位置
v.erase(begin, end); //移除[begin, end)区间的数据,返回下一个元素的位置
reverse(pos1, pos2); //将vector中的pos1~pos2的元素逆序存储

1.2 vector容器的几种构造方式

//< 默认构造
vector<int>v1;
for (int i = 0; i < 10; i++)
{
	v1.push_back(i);
}
//< 区间构造
vector<int>v2(v1.begin(),v1.end());//< 将v1 区间内的元素赋值到v2
//< n个元素构造
vector<int>v3(10,100);	//10个100
//< 拷贝构造
vector<int>v4(v3);	//< 将v3的元素赋值给v4

1.3 vector容器的赋值方式

//< 利用 = 赋值
vector<int>v1;
vector<int>v2;
v2 = v1;
//< 利用assign函数赋值
vector<int>v3;
v3.assign(v1.begin(), v1.end());//从v1的begin到v1的end
print(v3);
vector<int>v4;
v4.assign(10, 100);

1.4 vector容器的容量和大小

//< 判断容器是否为空
if (v1.empty())
{
	cout << "vector v1 is empty" << endl;
}
else
{
	cout << "vector v1 is not empty and the capacitty of v1 is " << v1.capacity() << endl;
	cout << "the size of v1 is " << v1.size() << endl;
}
//< 使用resize 重新指定容器的大小
v1.resize(15);	//超出的部分使用 0 来填充
v1.resize(15,1);	//用 1 来代替自动填充的 0
v1.resize(5);
//< vector 的容量
vector<int>v;
for (int i = 0; i < 100000; i++)
 {
	 v.push_back(i);
 }
 cout << "the capacity of vector v is " << v.capacity() << endl;
 cout << "the size of vector of vector v is " << v.size() << endl;
 v.resize(3);		//不会改变容器的capacity	
 cout << "the capacity of vector v is " << v.capacity() << endl;
 cout << "the size of vector of vector v is " << v.size() << endl;
 vector<int>(v).swap(v);	//将容器的capacity 和 size 都转换为size
 cout << "the capacity of vector v is " << v.capacity() << endl;
 cout << "the size of vector of vector v is " << v.size() << endl;
 //< 预留空间
 //减少因为要插入的数据过大是动态扩展的次数(因为如果数据过大时,在插入时不是一次性插入完的,而是依次开辟空间而动态扩展的
 vector<int>v1;
int num = 0;
int *p = NULL;
//v1.reserve(100000);
for (int i = 0; i < 100000; i++)
{
	v1.push_back(i);
	if (p != &v1[0])
	{
		p = &v1[0];
		num++;
	}
}
cout << num << endl;

1.5 vector容器的插入和删除

//< 利用insert插入 或者是 pushback和popback等方式插入
vector<int>v1;
v1.push_back(10);v1.push_back(20);v1.push_back(30);	//尾插
v1.push_back(40);v1.push_back(50);print(v1);
v1.pop_back();print(v1);	//头插
v1.insert(v1.begin(), 100);print(v1);
v1.insert(v1.begin(),2, 200);print(v1);	//从指定位置插入指定长度的指定的数据
//< 容器的删除  利用erase删除特定内容  clear清空容器
v1.erase(v1.begin());print(v1);
v1.erase(v1.begin(), v1.end()-1); print(v1);//从开始删除直到end - 1
v1.clear(); print(v1);	//删除全部

1.6 vector容器的数据存取

这里有一点需要着重注意!!
最后一个元素不是end而是back,end指的是最后一个元素的下一个

//< (1)利用" [] " 访问容器内元素
for (int i = 0; i < v1.size(); i++) // size 判断容器内元素的大小
{
	cout << v1[i] << " ";	//遍历容器内的元素
}
//< (2)利用 at 访问容器内元素
for (int i = 0; i < v1.size(); i++)
{
	cout << v1.at(i) << " ";
}//< (3)第一个和最后一个
cout << "第一个元素为: " << v1.front() << endl;
cout << "最后一个元素为: " << v1.back() << endl;
//< vector容器内元素的呼唤  swap函数
// 首先设置好两个vector容器 v1和v2 并插入不同的数据
v1.swap(v2);

2、Vector容器使用总结

使用过程中,最深切的一点就是在使用动态数组的时候,
终于不用在不断的new 新的数据,还得惦记着去释放,不断的复制数据等到操作。
下面将继续学习STL中的string、map等等容器。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值