STL之 Tips&易错

记录一些punchline和tip

———————————————分割线———————————————————

SHOW:迭代器的随机访问:即跳跃式访问

判断某一容器的迭代器是否支持可随机访问:
以vector为例

//思路:先定义一个vector的迭代器,再让这个迭代器+一个非0数

vector<int>::iterator it = v.begin();
it+=3;

**如果编译器不报错,即表示支持随机访问

SHOW:用swap收缩空间(同时还要用resize重置容器大小)

void skill01()
{
	vector<int> v01;
	for (double i = 0; i < 1000000; i++)
	{
		v01.push_back(i);                        //**初始化v01**
	}
	cout << "容量" << v01.capacity() << endl;
	cout << "实际元素个数" << v01.size() << endl;
	v01.resize(3);                               //用resize充值v01的大小
	vector<int>(v01).swap(v01);                  //初始化一个匿名对象,并用swap将匿名与v01交换
	cout << "容量" << v01.capacity() << endl;        //缩小容量目的达到
	cout << "实际元素个数" << v01.size() << endl;
}

SHOW:用reserve预留足够大的空间以减小开辟空间的时间

vector的结构为连续线性空间,当上一次找到的一段连续空间满载后,需要重新寻找一段更大的连续空间,

并且之前的迭代器(指针)全部失效,需要重新对指针赋值,因此

p=&v02[0]; num++; 两行可以对迭代器进行重新赋值,并用num记录重新开辟空间的次数

void skill02()
{
	vector<int> v02;
	v02.reserve(10000);
	int* p = NULL;
	int num = 0;
	for (int i = 0; i < 10000; i++)
	{
		v02.push_back(i);
		if (p != &v02[0])
		{
			p = &v02[0];
			num++;
		}
	}
}

**SHOW:循环终止条件必须要有 **!=****,否则会出现越界提示,程序崩溃

在这里插入图片描述

//正确形式
for (deque<int>::iterator it = Score.begin(); it != Score.end(); it++)

双向循环链表判定

NULL

list反转排序

1.区别于逆序遍历,逆序遍历不改变原先各位置上的值,反转排序则会改变值
2.如果直接用sort() ,系统会报错
原因: 所有不支持随机访问的容器都不能使用系统提供的算法
解决方法,调用容器自带的,比如:L.sort();
3.反转排序步骤`L.reverse();L.sort();

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

void test01()
{
	list<int> L;
	L.push_back(10);
	L.push_back(20);
	L.push_back(40);
	L.push_back(30);
	L.reverse();
	myPrint(L);
	L.sort();
	myPrint(L);
}

SHOW:map,multimap的value(也就是<>里的第二个)为自定义数据类型(类类型)时如何表示

//示例
multimap<int, Worker>::iterator it = m.begin();
cout << "姓名" << it->second.name << "工资" << it->second.pay << endl;
(*it).name; //非关联式容器

分割线________________

相似单词区分专栏!!!!!!`

part1:reverse() & reserve()
巧记:瑞佛斯(reverse)
//反转,1,3,5------>5 , 3, 1 verse跟serve对称,所以reverse是反转

瑞瑟夫(reserve) 预留足够大的空间:serve谐音save,留出,前缀re,重新留出==预留

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值