C++实验5
#include <iostream> #include <vector> #include <string> using namespace std; // 函数声明 void output1(vector<string> &); void output2(vector<string> &); int main() { vector<string>likes, dislikes; // 创建vector<string>对象likes和dislikes likes.push_back("favorite book: 被月光听见 "); likes.push_back("music: 喜欢"); likes.push_back ("film: 杀人者的记忆法"); likes.push_back ("paintings: none "); likes.push_back ("anime: 一人之下"); likes.push_back ("sport: table tennid"); likes.push_back ("sportsman: 张继科");// 为vector<string>数组对象likes添加元素值 ( favorite book, music, film, paintings,anime,sport,sportsman,etc) // 补足代码 // 。。。 cout << "-----I like these-----" << endl; output1(likes) ; // 调用子函数输出vector<string>数组对象likes的元素值 // 补足代码 // 。。。 // 为vector<string>数组对象dislikes添加元素值 // 补足代码 // 。。。 cout << "-----I dislike these-----" << endl; dislikes.push_back("disguest book: white elephant "); dislikes.push_back("music: noisy music"); dislikes.push_back("film: meaningless films"); dislikes.push_back("paintings: none "); dislikes.push_back("anime: childish cartoons "); dislikes.push_back("sport: none"); dislikes.push_back("sportsman: none"); // 调用子函数输出vector<string>数组对象dislikes的元素值 // 补足代码 // 。。。 output2(dislikes); // 交换vector<string>对象likes和dislikes的元素值 // 补足代码 // 。。。 swap(likes,dislikes); cout << "-----I likes these-----" << endl; // 调用子函数输出vector<string>数组对象likes的元素值 // 补足代码 // 。。。 output1(likes); cout << "-----I dislikes these-----" << endl; // 调用子函数输出vector<string>数组对象dislikes的元素值 // 补足代码 // 。。。 output2(dislikes) ; return 0; } // 函数实现 // 以下标方式输出vector<string>数组对象v的元素值 void output1(vector<string> &v) { int i; for(i=0;i<v.size();i++) cout<<v[i]<<endl; // 补足程序 // 。。。 } // 函数实现 // 以迭代器方式输出vector<string>数组对象v的元素值 void output2(vector<string> &v) { vector<string>::iterator p; for(p=v.begin();p!=v.end();p++) cout<<*p<<endl; // 补足程序 // 。。。 }
#ifndef MATRIX_H #define MATRIX_H class Matrix { public: Matrix(int n); // 构造函数,构造一个n*n的矩阵 Matrix(int n, int m); // 构造函数,构造一个n*m的矩阵 Matrix(const Matrix &); // 复制构造函数,使用已有的矩阵X构造 ~Matrix(); //析构函数 void setMatrix(const float *pvalue); // 矩阵赋初值,用pvalue指向的内存块数据为矩阵赋值 void printMatrix() const; // 显示矩阵 inline float & element(int i, int j){ return p[(i-1)*cols+j-1]; } //返回矩阵第i行第j列元素的引用 inline float element(int i, int j) const{ return p[(i-1)*cols+j-1]; }// 返回矩阵第i行第j列元素的值 void setElement(int i, int j, int value); //设置矩阵第i行第j列元素值为value inline int getLines() const{return lines;}; //返回矩阵行数 inline int getCols() const{return cols;}; //返回矩阵列数 private: int lines; // 矩阵行数 int cols; // 矩阵列数 float *p; // 指向存放矩阵数据的内存块的首地址 }; #endif
#include"matrix.h" #include<iostream> using namespace std; Matrix::Matrix(int n):lines(n),cols(n) { p=new float[lines*cols]; //构造函数的实现 } Matrix::Matrix(int n,int m) :lines(n),cols(m) { p=new float[lines*cols]; } Matrix::Matrix(const Matrix &X):lines(X.lines),cols(X.cols) {p=X.p;}//复制构造函数 Matrix:: ~Matrix(){ delete[] p; //析构函数 } void Matrix::setMatrix(const float *pvalue) { for(int i=0;i<lines*cols;i++) { p[i]=pvalue[i]; } } void Matrix:: printMatrix() const { int i,j; for(i=0;i<lines;i++) { //显示矩阵 for(j=0;j<cols;j++) cout<<p[i*cols+j]<<" "; cout<<endl; } } void Matrix::setElement(int i, int j, int value) { p[(i-1)*cols+j-1]=value; //设置矩阵第i行第j列元素值为value }
#include <iostream> #include"matrix.h" using namespace std; int main() { Matrix M1(2); Matrix M2(2,3); //构造函数 float a[4]={1,2,3,4}; float b[6]={1,2,3,4,5,6}; M1.setMatrix(a); //为矩阵赋值 M2.setMatrix(b); Matrix M(M1); cout<<"-------M------"<<endl; M.printMatrix(); cout<<"------M1------"<<endl; M1.printMatrix(); cout<<"-----M2-----"<<endl; M2.printMatrix(); cout<<"----M1(1,2):"<<M1.element(1,2)<<endl; cout<<"-----change M2(2,2) to 8"<<endl; M2.setElement(2,2,8); //.设置第二行第二列元素为8 M2.printMatrix(); M2.getLines(); //矩阵行数 M2.getCols(); //矩阵列数 return 0; }
Matrix中 一开始构造函数中将p=new float[]写成float* p=new float[] 结果运行出来什么都么有
关于内联函数 函数实现需要在头文件里
复制构造函数 调用方式一开始也错了
暴漏了很多不注意的问题