編程實驗部分
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里就行了
雖然我並不知道原因...