题目
8.(单选题,5.5分)以下代码的输出结果是()struct Cmp{bool operator()(ints a,intsb)(return a>b;)};vectora=(3,4,1,2,5);sort(a.begin()+2,a.end(),Cmp());for(int x:a)printf("%d",x);printf("n");A. 1 2 3 4 5B. 5 4 3 2 1C. 3 4 5 2 1D. 3 4 1 2 5
8.(单选题,5.5分)
以下代码的输出结果是()
struct Cmp{
bool operator()(ints a,intsb)(
return a>b;
)
};
vectora=(3,4,1,2,5);
sort(a.begin()+2,a.end(),Cmp());
for(int x:a)
printf("%d",x);
printf("\n");
A. 1 2 3 4 5
B. 5 4 3 2 1
C. 3 4 5 2 1
D. 3 4 1 2 5
题目解答
答案
C. 3 4 5 2 1
解析
考查要点:本题主要考查C++中std::sort函数的用法,自定义比较器的实现,以及向量部分区间的排序逻辑。
解题核心思路:
- 理解比较器的作用:自定义结构体
Cmp通过重载operator()实现降序排序。 - 确定排序区间:
sort(a.begin()+2, a.end(), Cmp())表示对向量中索引2到末尾的元素进行降序排序。 - 分析排序前后的元素变化:原向量
{3,4,1,2,5}中被排序的部分{1,2,5}按降序排列后变为{5,2,1},最终向量变为{3,4,5,2,1}。
破题关键点:
- 比较器逻辑:
return a > b表示降序。 - 排序区间范围:
a.begin()+2对应第三个元素,排序不影响前两个元素。
代码逻辑分解
1. 定义比较器结构体Cmp
struct Cmp {
bool operator()(int a, int b) {
return a > b;
}
};
- 作用:
operator()返回a > b,表示降序排列。
2. 初始化向量a
vector<int> a = {3,4,1,2,5};
- 初始值:
a = [3,4,1,2,5]。
3. 调用sort函数
sort(a.begin() + 2, a.end(), Cmp());
- 排序区间:从索引2(值为
1)到末尾(包含索引2、3、4的元素1,2,5)。 - 排序方式:使用
Cmp比较器,按降序排列。 - 排序结果:原区间
[1,2,5]变为[5,2,1],最终向量变为[3,4,5,2,1]。
4. 输出向量元素
for (int x : a) printf("%d", x);
- 输出结果:
34521(实际输出为3 4 5 2 1,因printf未添加空格)。