using namespace std;
在C++中,std 就好比是一个大家族的姓氏,里面包含了很多成员(函数、对象等)。当你使用 using namespace std; 时,就好比是你加入了这个大家族,可以直接称呼家族成员的名字而不需要加上姓氏。所以,当你调用 sort 函数时,编译器会知道你指的是 std 这个大家族中的 sort 成员。如果不使用 using namespace std;,就好比你在日常生活中需要在称呼某个人时,要加上他们的姓氏以示尊重和区分。
一.第一题:
考察带有默认参数的函数
原有代码:
#include <iostream>
using namespace std;
void change(int a = 0,int b = 0,int c = 0);
int main()
{
int a,b,c
cin>>a>>b>>c>>endl;
change(a,b,c);
cout<<a<<","<<b<<","<<c<<","<<endl;
cout << "Hello world!" << endl;
return 0;
}
void change(int a, int b, int c)
{
if (c == 0) {
return max(a, b);
} else {
return max(max(a, b), c);
}
}
修改后的代码:
#include <iostream>
using namespace std;
void change(int a = 0, int b = 0, int c = 0);
int main()
{
int a, b, c;
cin >> a >> b >> c;
change(a, b, c);
cout << a << "," << b << "," << c << "," << endl;
cout << "Hello world!" << endl;
return 0;
}
void change(int a, int b, int c)
{
int maxNum = (c == 0) ? max(a, b) : max(max(a, b), c);
cout << "Max of two or three numbers: " << maxNum << endl;
}
比较默认参数:
#include <iostream>
using namespace std;
int maxOfTwoOrThree(int a = 0, int b = 0, int c = 0) {
if (c == 0) {
return max(a, b);
} else {
return max(max(a, b), c);
}
}
int main() {
int maxNum1 = maxOfTwoOrThree(); // 比较默认值
int maxNum2 = maxOfTwoOrThree(10, 20); // 比较两个数
int maxNum3 = maxOfTwoOrThree(10, 20, 15); // 比较三个数
cout << "Max of default values: " << maxNum1 << endl;
cout << "Max of two numbers: " << maxNum2 << endl;
cout << "Max of three numbers: " << maxNum3 << endl;
return 0;
}
注意事项:
1. cin >> a >> b >> c >> endl; 中的 endl 是一个输出流控制符,不应该出现在 cin 语句中,因为它是用于在输出流中插入换行符的。
2. 如果 函数声明和定义中的返回类型是 void,而不是 int。则该函数不返回任何值。因此不能用return。
3.condition ? expression1 : expression2
condition 是一个条件表达式,
如果该条件为真(非零),则整个表达式的值为 expression1;
如果条件为假(0),则整个表达式的值为 expression2。
expression1 和 expression2 是两个可能的表达式,根据条件的真假来选择其中一个表达式的值作为整个表达式的结果。
二.第二题:
考察使用引用的函数
#include <iostream>
using namespace std;
void max_Of_Two_Or_Three(int &a, int &b, int &c) {
int maxNum = (c == 0) ? max(a, b) : max(max(a, b), c);
cout << "Max of two or three numbers: " << maxNum << endl;
}
int main() {
int num1,num2,num3;
cin >> num1 >> num2 >>num3;
max_Of_Two_Or_Three(num1, num2, num3);
cout << "Updated values: " << num1 << "," << num2 << "," << num3 << endl;
return 0;
}
注意:声明引用的同时必须对其初始化
三.第三题:
逆序输出:reversed(使反转)
#include <iostream>
#include <string>
using namespace std;
int main() {
string inputString, reversedString;
cout << "Enter a string: ";
cin >> inputString;
// 逆序输出字符
for (int i = inputString.length() - 1; i >= 0; i--) {
reversedString += inputString[i];
}
cout << "Reversed string: " << reversedString << endl;
return 0;
}
针对for循环:
for (int i = inputString.length() - 1; i >= 0; i--) {
reversedString += inputString[i];
}
这段代码是一个 for 循环,用于逆序遍历输入字符串 inputString 中的每个字符,并将字符逐个添加到 reversedString 中。以下是对代码的详细解释:
1. int i = inputString.length() - 1;:初始化一个整型变量 i,其初始值为输入字符串的长度减去1。这是因为字符串的索引是从0开始的,所以最后一个字符的索引是长度减1。
2. i >= 0;:循环条件,当 i 大于等于0时,继续循环。这保证了循环会遍历到字符串的第一个字符。
3. i--:每次循环结束后,递减 i 的值,以便向前遍历字符串中的字符。
4. reversedString += inputString[i];:在循环体中,将输入字符串 inputString 中索引为 i 的字符添加到 reversedString 的末尾。这样就实现了将字符串逆序存储在 reversedString 中的过程。
针对”-=”这类符号:x -= y”,该表达式就等同于“x = x - y
通过这段代码,循环会逆序遍历输入字符串中的每个字符,并将它们逐个添加到 reversedString 中,最终得到的 reversedString 就是输入字符串的逆序。
四.第四题:
函数模版:
// 函数模板,用于排序任意类型的数组
template <typename T>
void sortArray(T arr[], int n) {
sort(arr, arr + n);
}
// 调用函数模板,对不同类型的数组进行排序
sortArray(intArr, n);
sortArray(floatArr, n);
sortArray(doubleArr, n);
解释说明:在C++中,template <typename T> 中的 template 关键字用于定义模板。通过使用模板,可以编写通用的代码,使其能够适用于不同的数据类型。在这里,<typename T> 表示定义了一个模板,其中 T 是一个模板参数,可以在模板中用作类型参数。这样,你可以在模板中使用 T 代表任意类型,从而实现代码的通用性
重载函数(即为名称相同但形参不同的函数):
// 重载函数,用于排序整型数组
void sortArray(int arr[], int n) {
sort(arr, arr + n);
}
// 重载函数,用于排序单精度型数组
void sortArray(float arr[], int n) {
sort(arr, arr + n);
}
// 重载函数,用于排序双精度型数组
void sortArray(double arr[], int n) {
sort(arr, arr + n);
}
补充:
(sort函数)
#include <algorithm>
void sortArray(int arr[], int n);
int main() {
int intArr[] = {4, 2, 5, 1, 3};
int n = sizeof(intArr) / sizeof(intArr[0]);
sortArray(intArr, n);
return 0;
}
void sortArray(int arr[], int n) {
std::sort(arr, arr + n);
}
解释说明:
1.这段代码 sortArray(intArr, n); 是在调用名为 sortArray 的函数,并传入名为 intArr 和 n 的参数。这意味着在这个地方,程序会执行 sortArray 函数,并对 intArr 数组中的元素进行排序,数组的长度为 n。
2.int n = sizeof(intArr) / sizeof(intArr[0]); 的意思是计算数组 intArr 中元素的个数。它通过计算整个数组的字节大小除以单个元素的字节大小来得到数组中元素的个数。这种方法通常用于确定数组的长度,以便在后续的操作中使用。
3.虽然 sort 函数已经存在于标准库中,但在使用之前仍需要提前声明或定义函数的原型,以便编译器能够识别函数的调用。
- std::sort: 是 C++ 标准库中提供的排序函数。
- arr: 表示要排序的数组。
- arr + n: 表示排序的结束位置,即数组的末尾位置。
- 所以 std::sort(arr, arr + n); 表示对数组 arr 中从第零个元素开始到第 n-1 个元素结束的范围进行排序。
(vector)
#include <iostream>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> vec = {4, 2, 5, 1, 3};
std::sort(vec.begin(), vec.end());
for (int num : vec) {
std::cout << num << " ";
}
return 0;
}
解释说明:
在这段代码中,std::vector 是C++标准库中的容器,类似于动态数组,可以存储多个元素并动态调整大小。在这里,std::vector<int> vec = {4, 2, 5, 1, 3}; 创建了一个整数类型的 vector,并初始化了一些整数值。
使用 std::sort(vec.begin(), vec.end()); 对 vector 中的元素进行排序,然后 for (int num : vec) 循环遍历 vector 中的元素,并使用 std::cout 输出每个元素。