实验五

实验内容一

#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;
}

 

posted @ 2018-05-23 23:05  流云惊锋  阅读(143)  评论(0编辑  收藏  举报