list使用

list的使用于string的使用都类似,首先通过查阅来看list有哪些函数:

list使用_第1张图片

可以看到函数还是蛮多的,我们值重点一些常用的和常见的:

1.关于push_back,push_front,和对应迭代器的使用

//关于push_back和push_front
void test_list1()
{
	list lt;
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	lt.push_back(4);
	lt.push_back(5);

	lt.push_front(10);
	lt.push_front(20);

	//范围for
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;
}

2.关于insert:

void test_list2()
{
	list lt;
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	lt.push_back(4);
	lt.push_back(5);

	lt.push_front(10);
	lt.push_front(20);

	//insert:
	//第五个位置插入数据:(对应迭代器中无加法迭代,无法直接找到,需要遍历)
	//错误写法:
	//lt.insert(lt.begin()+5, 10);
	//正确:
	auto it = lt.begin();
	/*for (size_t i = 0; i < 5; i++)
	{
		++it;
	}
	lt.insert(it, 10);*/
	
	//具体找到某个数并在其之前插入
	it = find(lt.begin(), lt.end(), 3);
	if (it != lt.end())
	{
		lt.insert(it, 30);

		// insert以后,it不失效
		*it *= 100;
	}
}

对应的insert的使用需要注意的是其不想string一样可以使用迭代器重载的“+”号,因为list是由指针

指向的所以“+”号重载起来只会影响效率,所以我们要使用insert或者erase的时候需要先找到要插

入的地方或者删除的元素才可以顺利插入。 

3.关于erase:

void test_list2()
{
	list lt;
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	lt.push_back(4);
	lt.push_back(5);

	lt.push_front(10);
	lt.push_front(20);

	//erase:
	//同理找到某个具体的数在删除:
	it = find(lt.begin(), lt.end(), 2);
	if (it != lt.end())
	{
		lt.erase(it);
	}
	

	//删除所有偶数
	it = lt.begin();
	while (it != lt.end())
	{
		if (*it % 2 == 0)
		{
			it = lt.erase(it);
		}
		else
		{
			++it;
		}
	}

}

 要注意的与insert相同。

4.关于reverse和sort

//reverse,sort
void test_list3()
{
	list lt;
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	lt.push_back(4);
	lt.push_back(5);

	lt.push_front(10);
	lt.push_front(20);

	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;

	reverse(lt.begin(), lt.end());

	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;

	lt.reverse();

	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;

	lt.sort();
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;


}

这些就是对应的需要掌握的并且基础的

你可能感兴趣的:(list,数据结构)