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里就行了

雖然我並不知道原因...

 

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM