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[] 结果运行出来什么都么有
关于内联函数 函数实现需要在头文件里
复制构造函数 调用方式一开始也错了
暴漏了很多不注意的问题














 

posted @ 2018-05-23 20:30  rohahaa  阅读(199)  评论(0编辑  收藏  举报