编程实验部分
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列元素值为valueinline 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里就行了
虽然我并不知道原因...