#include<iostream>usingnamespace std;template<classT>voidmake2dArray(T **&x,int numberOfrows,int*rowSize){// 先将x实例化,传入的参数只有一个名字,没有实际位置
x =new T *[numberOfrows];for(int i=0;i<numberOfrows;++i)
x[i]=new T [rowSize[i]];}template<classT>voiddelete2dArray(T **&x,int numberOfrows){for(int i=0;i<numberOfrows;++i)delete[] x[i];delete[] x;
x=NULL;}intmain(){// 当行维度和列维度都未知时,利用指针的指针进行int** x;int rows=5;int rowSize[]={3,4,8,6,3};make2dArray(x, rows, rowSize);
x[2][6]=5;
cout<< x[2][6]<<endl;delete2dArray(x, rows);return0;}
Q19
#include<iostream>usingnamespace std;intmulti(int n){if(n<2)return1;elsereturn n *multi(n-1);}intmain(){int result =multi(10);
cout<<result<<endl;return0;}
#include<iostream>#include<vector>usingnamespace std;template<classT>
T accumulate(typename vector<T>::iterator start,typename vector<T>::iterator end, T initialValue){for(;start < end; start++){
initialValue +=*start;}return initialValue;}intmain(){
vector<double> vec={0.1,6.3,9.0,5,4.8,3.5};double initialValue=0.0;double sum =accumulate(vec.begin(), vec.end(), initialValue);
cout << sum << endl;return0;}
Q28
#include<iostream>#include<vector>usingnamespace std;template<classT>
T accumulate(typename vector<T>::iterator start,typename vector<T>::iterator end, T initialValue, T (*pf)(T &a, T &b)){for(;start < end;++start){
initialValue =pf(initialValue,*start);}return initialValue;}template<classT>
T multi(T &a, T &b){return a * b;}template<classT>
T add(T &a, T &b){return a + b;}intmain(){
vector<double> vec={0.1,6.3,9.0,5,4.8,3.5};double initialValue=1.0;double sum =accumulate(vec.begin(), vec.end(), initialValue, multi);
cout << sum << endl;
sum =accumulate(vec.begin(), vec.end(), initialValue, add);
cout << sum << endl;return0;}
29
#include<iostream>#include<vector>usingnamespace std;// 利用内置数组类型进行操作template<classT>boolcopy(T *start, T *end, T *aim){for(;start<end;++start,++aim){*aim =*start;}returntrue;}intmain(){int a[]={5,9,8,3,7,5};int b[sizeof(a)/sizeof(*a)];
cout <<copy(begin(a),end(a),begin(b))<< endl;
cout << b[5]<< endl;return0;}
30
#include<iostream>#include<ostream>#include<iterator>#include<algorithm>usingnamespace std;char str[]={'k','a','g','n','f','b','w','h'};// int str[] = {5, 9, 8, 3, 7, 5};template<classT>voidpermutations(T list[],int&k,int m){sort(list, list + m);do{copy(list, list + m, ostream_iterator<T>(cout,""));
cout<<endl;
k++;}while(next_permutation(list, list + m));;}intmain(){int num=0;permutations(str, num,8);
cout << num<<endl;return0;}
32
#include<iostream>#include<vector>#include<algorithm>usingnamespace std;// template <class T>// int count(T *start, T *end, T value)// {// int num=0;// for(;start<end;start++)// {// if(*start==value)// num++;// }// return num;// }intmain(){char arr[]={'g','g','h','d','g','e','h'};
cout <<count(arr,end(arr),'h')<< endl;return0;}
数据结构、算法与应用 C++语言描述 第一章课后习题Q12#include <iostream>using namespace std;template <class T>void make2dArray(T ** &x, int numberOfrows, int *rowSize){ // 先将x实例化,传入的参数只有一个名字,没有实际位置 x = new T *[numberOfrows]; for(int i=0;i<nu