数据结构,算法与应用 c++语音描述(原版第二版) 学习笔记 第一章 练习
1. 解释为什么程序1-7的交换函数没有把形参x和y所对应的实参的值交换。如何修改代码,使实参的值得到交换?
程序1-7 交换两个整数的不正确的代码
void swap(int x, int y) { //交换整数x和y int temp = x; x = y; y = temp; }
解答:
#include <iostream> using namespace std; void swap(int &x, int &y) { //交换整数x和y int temp = x; x = y; y = temp; } int main() { int a(8); int b(9); cout <<"之前交换函数swap前:" <<"a:" << a << " b:" << b << endl; swap(a, b); cout << "a:"<<a<<" b:"<<b<<endl; return 0; }
将函数传形参改为传引用,引用改变了实参的值。
当形参是引用类型时,形参对应的实参会被引用传递。所以实参的值会被交换。
2.编写一个模版函数 count, 返回值是数组a[0:n-1]中value出现的次数。测试你的代码。
解答:
程序1
#include <iostream> using namespace std; template<class Ta,class Tb> Ta count(Tb* array_, Ta array_size, Tb array_value) {//数组的指针,数组长度,数组元素 Ta value_number = 0; //元素个数计数标记 for (int i = 0; i <= array_size;i++) { if (array_[i]== array_value) value_number++; else continue; } return value_number; } int main() { int array_[] = { 1, 2, 2, 3, 4, 4, 4,5,8,8,8,8,8,9,9,9 }; int Array_Size = sizeof(array_); int Array_Value; cout << "数组:array_[]的元素为:1, 2, 2, 3, 4, 4, 4,5,8,8,8,8,8,9,9,9" << endl; cout << "输入要查的元素:"; cin >> Array_Value; cout << "所查元素为:" << Array_Value << endl; cout<<"数量:"<<count(array_, Array_Size, Array_Value)<<endl; return 0; }
程序2
#include <iostream> using namespace std; template<class Ta,class Tb> Ta count(Tb* array_, Ta array_size, Tb array_value) {//数组的指针,数组长度,数组元素 Ta value_number = 0; //元素个数计数标记 for (int i = 0; i <= array_size;i++) { if (array_[i]== array_value) value_number++; else continue; } return value_number; } int main() { float array_[] = { 1.2, 1.2, 2.0, 1.2, 2.2, 1.8, 1.8, 1.8, 1.2 }; int Array_Size = sizeof(array_); float Array_Value; cout << "数组:array_[]的元素为:1.2,1.2, 2.0,1.2,2.2,1.8,1.8,1.8,1.2" << endl; cout << "输入要查的元素:"; cin >> Array_Value; cout << "所查元素为:" << Array_Value << endl; cout<<"数量:"<<count(array_, Array_Size, Array_Value)<<endl; return 0; }
整理:通过程序1和程序2 对比
Ta count(Tb* array_, Ta array_size, Tb array_value) {//数组的指针,数组长度,数组元素 Ta value_number = 0; //元素个数计数标记 for (int i = 0; i <= array_size; i++) { if (array_[i] == array_value) value_number++; else continue; } return value_number; }
函数 count 共用一个模版,引用不同元素类型的数组时都可以使用,程序1数组的元素为int 型,程序2的数组元素为float型。
3.编写一个模版函数fill,给数组a[start:end-1]赋值value。测试你的代码。
解答:
先写个不用模版程序
创建一个动态数组,赋值并输出,由此来设计模版。
#include <iostream> using namespace std; int main() { int array_value; int Array_Size; cout << "------------------创建一个动态整型数组---------------------" << endl; cout << "输入数组长度:"; cin >> Array_Size; int *Array = new int[Array_Size]; for (int i = 0; i <= Array_Size;i++) { cout << "输入第"<<i+1<<"个数组元素:"; cin >> array_value; Array[i] = array_value; } cout << "数组Array元素:"; int i = 0; for ( ;i < Array_Size; i++) { cout << Array[i] << ","; } cout << Array[i]; cout << endl; return 0; }