• c++简单程序设计-5


    编程实验部分
    1.vector3.cpp
    #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");// 为vector<string>数组对象likes添加元素值
        likes.push_back("music");
        likes.push_back("film");
        likes.push_back("anime");
        
        cout << "-----I like these-----" << endl;
        output1(likes);// 调用子函数输出vector<string>数组对象likes的元素值 
        
        dislikes.push_back("sport");// 为vector<string>数组对象dislikes添加元素值 
        dislikes.push_back("sportsman");
        
        cout << "-----I dislike these-----" << endl;
        output1(dislikes);// 调用子函数输出vector<string>数组对象dislikes的元素值 
        
        likes.swap(dislikes);// 交换vector<string>对象likes和dislikes的元素值 
    cout << "-----I likes these-----" << endl; output2(likes);// 调用子函数输出vector<string>数组对象likes的元素值 cout << "-----I dislikes these-----" << endl; output2(dislikes);// 调用子函数输出vector<string>数组对象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) { int i; for(i=0;i<v.size();i++){ cout<<v[i]<<endl; } }

    
    

     2. 6-17的修改

    #include<iostream>
    using namespace std;
    
    int main(){                   //法1 
        int i=9; 
        int *p;
        p=&i;
        cout<<"The value at p:"<<*p;
        return 0;
    }
    
    int main(){                   //法2 
        int i=9; 
        int *p=&i;
        cout<<"The value at p:"<<*p;
        return 0;
    }
    
    int main(){                   //法3 
        int i; 
        int *p=&i;
        *p=9;
        cout<<"The value at p:"<<*p;
        return 0;
    }
    //原题指针没有初始化会随机指向某处内存,导致程序崩溃 
    //根据书上的模板写了三种方法 

    3. 6-18的修改

    #include<iostream>
    using namespace std;
    
    int fnl(){
        int *p=new int(5);
        return *p;
        delete p;   //原程序未用delete加以释放,会导致内存泄漏 
    }
    
    int main(){
        int a=fnl();
        cout<<"the value of a is:"<<a;
        return 0;
    }

    4.动态矩阵类Matrix

    //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 ;// 返回矩阵第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
    //main.cpp
    #include "Matrix.h"
    #include<iostream>
    using namespace std;
    int main() {
        Matrix A(3);
        Matrix B(3, 2);
        Matrix C(B);
        const float a[9] = { 1,2,3,4,5,6,7,8,9 }, b[6] = { 10,20,30,40,50,60 };
        A.setMatrix(a);
        B.setMatrix(b);
        C.setMatrix(b);
        cout << "矩阵A为:" << endl;
        A.printMatrix();
        cout << "矩阵B为:" << endl;
        B.printMatrix();
        cout << "B的复制构造函数矩阵C为:" << endl;
        C.printMatrix();
        float *x = &A.element(1, 1);
        cout << "矩阵A第1行第1列元素的引用:" << x<<endl;
        cout << "矩阵第1行第1列元素的值:" << A.element(1, 1) << endl;
        A.setElement(1, 1, 6);
        A.setElement(2, 1, 6);
        A.setElement(3, 1, 6);
        cout << "矩阵A的第1列全设为6:" << endl;
        A.printMatrix();
        cout << "A的行列分别为:" << A.getLines()  << " " << A.getCols() << endl;
        cout << "B的行列分别为:" << B.getLines()  << " " << B.getCols() << endl;
    }
    //matrix.cpp
    #include "Matrix.h"
    #include<iostream>
    using namespace std;
    
    Matrix::Matrix(int n) : lines(n) {                                     // 构造函数,构造一个n*n的矩阵
        cols = n;
        p = new float[lines*cols];
    }
    
    Matrix::Matrix(int n,int m) : lines(n),cols(m) {                       // 构造函数,构造一个n*m的矩阵
        p = new float[lines*cols];
    }
    
    Matrix::Matrix(const Matrix &X): lines(X.lines),cols (X.cols){         //复制构造函数的实现
        p = new float[lines*cols];
    }
    
    Matrix::~Matrix() {                                                   //析构函数
        delete[]p;
    }
    
    void Matrix::setMatrix(const float *pvalue) {        // 矩阵赋初值,用pvalue指向的内存块数据为矩阵赋值
        for (int i = 0; i < lines*cols; i++)
            *(p + i) = *(pvalue + i);
    }
    
    void Matrix::printMatrix() const {                                      // 显示矩阵
        for (int i = 0; i < lines; i++) {
            for (int j = 0; j < cols; j++) {
                cout << p[i*cols + j] << " ";
            }
            cout << endl;
        }
    }
    
    inline float Matrix::element(int i, int j) const {                 // 返回矩阵第i行第j列元素的值 
        return *(p + ((i - 1)*cols) + j - 1);
    }
    
    void Matrix::setElement(int i, int j, int value) {               //设置矩阵第i行第j列元素值为value
        *(p + ((i - 1)*cols) + j - 1) = value;
    }

    期中考试:https://www.cnblogs.com/tensheep/p/9079345.html

    实验总结与体会:

    书上有关vector模板的介绍还是太少了

    我找了一些概括了vector模板的用法的CSDN博客

    实验是大概完成了,但迭代器方式的输出还有些疑问

    这次实验最难写的就是最后一题了

    写的过程中经常遇见无法解析的外部符号的错误

    我查了些资料,也看了看其他同学的博客

    发现只要把matrix.cpp里的函数放进matrix.h里就行了

    虽然我并不知道原因...



  • 相关阅读:
    简单实用游标更改数据
    C# Http以文件的形式上传文件
    简单例子理解数据库事务
    安卓 隐藏按钮
    jQuery EasyUI API 中文文档
    Linux搭建Tomcat环境
    linux教程之一
    Android服务之PackageManagerService启动源码分析
    DSP、Media、AdExchanger之间的关系及交互流程
    Unity3D中的Coroutine具体解释
  • 原文地址:https://www.cnblogs.com/tensheep/p/9073851.html
Copyright © 2020-2023  润新知