实验五
实验内容一
#include <iostream> #include <vector> #include <string> #define rap(a,b)for(int a=0;a<b;++a) using namespace std; // 函数声明 void output1(vector<string> &); void output2(vector<string> &); int main() { vector<string>likes, dislikes; // 创建vector<string>对象likes和dislikes string sekil[]={"book", "music", "film", "paintings","anime","sport","sportsman"}; string sekilsid[]={"hana","dori","kaze","tsuki","doki","wutsirori"}; // 为vector<string>数组对象likes添加元素值 ( favorite book, music, film, paintings,anime,sport,sportsman,etc) // 补足代码 // 。。。 rap(i,7)likes.push_back(sekil[i]); cout << "-----I like these-----" << endl; // 调用子函数输出vector<string>数组对象likes的元素值 // 补足代码 // 。。。 output1(likes); // 为vector<string>数组对象dislikes添加元素值 // 补足代码 // 。。。 rap(i,6)dislikes.push_back(sekilsid[i]); cout << "-----I dislike these-----" << endl; // 调用子函数输出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) { rap(i,v.size())cout<<v[i]<<endl; // 补足程序 // 。。。 } // 函数实现 // 以迭代器方式输出vector<string>数组对象v的元素值 void output2(vector<string> &v) { for(vector<string>::iterator it = v.begin();it!=v.end();++it)cout<<(*it)<<endl; // 补足程序 // 。。。 }
实验内容二
源码1
#include <iostream> using namespace std; int main() { //int a; //int *p=&a; 可以先定义一个变量a,并将其地址赋给指针p int *p;//指针再被使用前没有被赋初值 *p=9; cout<<"The value at p: "<<*p; return 0;
源码2
#include <iostream> using namespace std; int fn1(){ int *p=new int(5); return *p;//用new分配的内存没有用delete释放,会导致分配的内存无法回收 //delete p; } int main() { int a=fn1(); cout<<"the value of a is: "<<a; return 0; }
实验内容三
Matrix.h
#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); // 复制构造函数,使用已有的矩阵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
Matrix.cpp
#include<bits/stdc++.h> #include "matrix.h" #define rap(a,b) for(int a=0;a<b;++a) using namespace std; Matrix::Matrix(int n){ // 构造函数,构造一个n*n的矩阵 cols=lines=n; float **mat= new float *[lines]; rap(i,lines)mat[i]=new float[cols]; p=new float[n*n]; rap(i,lines)memcpy(p+(i*cols),mat[i],cols*sizeof(float)); } Matrix::Matrix(int n, int m){// 构造函数,构造一个n*m的矩阵 lines=n; cols=m; float **mat= new float *[lines]; rap(i,lines)mat[i]= new float[cols]; p=new float[n*m]; rap(i,lines)memcpy(p+(i*cols),mat[i],cols*sizeof(float)); } Matrix::Matrix(const Matrix &X){ // 复制构造函数,使用已有的矩阵X构造 cols=X.cols; lines=X.lines; p=new float[cols*lines]; memcpy(p,X.p,cols*lines*sizeof(float)); } void Matrix::setMatrix(const float *pvalue){ // 矩阵赋初值,用pvalue指向的内存块数据为矩阵赋值 rap(i,lines) rap(j,cols)*(p+(i*cols)+j)=*(pvalue+(i*cols)+j); } void Matrix::printMatrix() const{ rap(i,lines) { rap(j,cols) cout<<*(p+(i*cols)+j)<<" "; cout<<endl; } } Matrix::~Matrix(){ delete p; } void Matrix::setElement(int i, int j, int value){ *(p+((i-1)*cols)+j-1)=value; }
Main.cpp
#include<bits/stdc++.h> #include"matrix.h" #define rap(a,b) for(int a=0;a<b;++a) using namespace std; int main(){ float **mat= new float *[4]; rap(i,4) mat[i]=new float [5]; rap(i,4)rap(j,5)mat[i][j]=i*5+j; float *tmp=new float[4*5]; rap(i,4)memcpy(tmp+(i*5),mat[i],5*sizeof(float)); Matrix c(2); cout<<"Testing PrintMatrix Func"<<endl; c.printMatrix(); Matrix a(4,5); a.setMatrix(tmp); cout<<"Testing setMatrix Func"<<endl; a.printMatrix(); Matrix b(a); cout<<"Testing CopyMatrix Func"<<endl; b.printMatrix(); cout<<"Testing setElement Func"<<endl; a.setElement(1,1,666); a.printMatrix(); cout<<"Testing whether B's data changes after changing A's data:"<<endl; b.printMatrix(); cout<<"Testing Print element func:"<<endl; cout<<a.element(1,1)<<endl; cout<<"Testing Print element's path func:"<<endl; float *tmp2=&a.element(1,1); cout<<tmp2<<endl; cout<<"Testing Print A's line num"<<endl; cout<<a.getLines()<<endl; cout<<"Testing Print A's cols num"<<endl; cout<<a.getCols()<<endl; delete tmp; rap(i,4)delete mat[i]; delete []mat; return 0; }