C++ 是⼀门古⽼的语⾔,但它的标准⾄今仍在不断发展。在 2011 年、 2014 年和 2017 年, C++ 的标准又进⾏了更新,被称为 C++11, C++14, C++17。其中, C++11 标准是最重要的⼀次更新,让 C++发⽣了重要的改变,也使得近年来的 C++ 程序与你在课本上(⽐如谭浩强)学到的 C++ 程序有很⼤的不同。你甚⾄会惊叹这是⼀种全新的语⾔。 C++14 和 C++17 则是对 11 标准的完善与扩充。越来越多的程序开始使⽤ 11 标准,它也会让你在写程序时更加得⼼应⼿。本题中,你将学习⼀些 11标准下的新语法。请参考本次作业 books/⽬录下的两个 pdf,并回答下⾯的问题。
设有类 A,并有 A 类的⼀组对象,组成了⼀个 vector。现在希望对这个 vector 进⾏排序,但排序的⽅式由 A.index 成员⼤⼩定义。那么,在 C++11 的语法下,程序写成:
#include <iostream>
#include <vector>
#include<algorithm>
using namespace std;
class A{
public:
A(const int& i):index(i){}
int index=0;
};
int main(int, char**){
A a1(3),a2(5),a3(9);
vector<A> avec{a1,a2,a3};
//lambda表达式,定义匿名函数
//sort函数 序列排序
sort(avec.begin(),avec.end(),[](const A&a1,const A&a2) {return a1.index<a2.index;});
//使用auto进行自动类型推导,无需确定类型
//使用新型for函数,a:avec进行遍历
for( auto& a: avec )cout<<a.index<<" ";
cout<<endl;
return 0;
}
请说明该程序中哪些地⽅⽤到了 C++11 标准的内容。提⽰:请关注范围 for 循环、⾃动类型推导、 lambda表达式等内容(见注释)