面向对象常用STL函数与算法(常用模板算法笔记)

STL里面的所有容器都有迭代器的概念,迭代器分为好几类,有只读的,有随机的

有顺序的,等等。C++当初在设计迭代器的时候,是想把它设计成指针那么用,类似一个数组指针,我们可以对其进行++和—操作,可以*它,也可以->它。这些指针具有的操作,迭代器基本都有

之所以要一对迭代器而不是一个迭代器,是因为迭代器本身就是一个范围,这个范围是左开右闭的,如[a,b),用if判断的方法就是 a<=c && c < b;

由此我们可以得知std::end(c)是不存在的

正序输出和倒序输出:

//Begin和rbegin: 一个正序,一个倒序
Sort(rbegin(xs), rend(xs));  //倒序排序

顺序容器介绍:

Stack:返回栈顶,push入栈,pop出栈,empty看看是不是空的,size容器里到底有多少东西。items.top()查看栈顶元素,可以作为返回值
 

stack.push() //入栈
stack.pop() //出栈
stack.empty() //看看是否为空
stack.size() //容器大小
stack.top() //栈顶内容可以作为返回值

队列queue:

front()返回队头
back()返回队尾
push()入列 
pop()出列
empty()看看是不是空的
size()容器里有多少东西

链表list:

​
list.list.push_front()
list.push_back()  //往链表头或链表尾插入数据
list.Pop_front()  
list.pop_back()  //从链表头或链表尾拿走数据
list.Size() //容器里有多少东西

​

MAP和MultiMap:

map类似python的字典,存储一个键值对,map一个键只能对应一个值,multimap一个键可以对应多个值

插入方法:

transcript.insert(make_pair(name, grade));

Insert:插入一个pair,如果key存在的话那么返回值的第二项是false;

Find:查找一个key erase:删除一个key

Clear清空map count:返回key的数量

Set和map类似,区别在于有没有绑定一个value给key

 

优先队列Priority_queue:

PQ.Push() //插入一个对象并排序

PQ.Pop() //弹出队首对象,不指定方式会弹出最大的那个

PQ.Top() //返回队头

PQ.Size() //返回对象的数量

PQ.Empty() //返回是否为空

STL常用函数

<algorihm> <numeric> <functional> 这几个文件中里面有丰富的函数,可以非常灵活地去运用,下面列举了几个常用函数及使用方法,放便以后实践中参考使用

	//将数组中的元素全部同乘以2
	vector<int> ccaseOne{ 1,2,3,4,5 };
	transform(begin(ccaseOne), end(ccaseOne), begin(ccaseOne), [](int a) {return a * 2; });  

    //将列表中符和条件的元素进行复制
	vector<int> ccaseTwo{ 2,12,15,20,25 };
	vector<int> ccaseThree;
	copy_if(begin(ccaseTwo),end(ccaseTwo), back_inserter(ccaseThree), [](int a) {return a % 2 == 1; });

	//字符串连接
	vector<string> st{ "I","am","english","leaner" };
	cout << accumulate(begin(st), end(st), string(), [](const string &a, const string& b) {return a == "" ? b : a + " " + b; }) << endl;  //accumualte是计算函数

	//计算标准差
	vector<double> xs{ 1,1,1,1,1,1,1,1,1,10 };
	auto sum = accumulate(begin(xs), end(xs), 0.0, plus<double>());
	auto average = sum / xs.size();
	auto sumOfSquares = accumulate(begin(xs), transform(begin(xs), end(xs), begin(xs), [](auto x) {return x * x; }), 0.0, plus<double>());
	cout << sqrt(sumOfSquares / xs.size() - average * average) << endl;


	//计算公共字串
	vector<string> xs{ "abc1","abd","ab","abc2" };
	auto first = xs.at(0);
	auto prefix = accumulate(begin(xs) + 1, end(xs), end(first), [&](auto it, auto str) {
		return mismatch(begin(first), it, begin(str), end(str)).first;
	});

 

猜你喜欢

转载自blog.csdn.net/alex1997222/article/details/81320263
今日推荐