实验5
Posted flyingbrid-nest
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验5相关的知识,希望对你有一定的参考价值。
ex3
代码补充如下
#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 string ch,ch1; // 为vector<string>数组对象likes添加元素值 ( favorite book, music, film, paintings,anime,sport,sportsman,etc) cout<<"为likes添加元素,输入-1结束"<<endl; while(cin>>ch,ch!="-1") { likes.push_back(ch); } // 补足代码 cout << "-----I like these-----" << endl; // 调用子函数输出vector<string>数组对象likes的元素值 output1(likes); // 补足代码 // 为vector<string>数组对象dislikes添加元素值 cout<<"为dislikes添加元素,输入-1结束"<<endl; while(cin>>ch1,ch1!="-1"){ dislikes.push_back(ch1); } // 补足代码 cout << "-----I dislike these-----" << endl; // 调用子函数输出vector<string>数组对象dislikes的元素值 // 补足代码 output2(dislikes); // 交换vector<string>对象likes和dislikes的元素值 // 补足代码 likes.swap(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) { // 补足程序 // 。。。 for(int i=0;i<v.size();i++) { cout<<v[i]<<endl; } } // 函数实现 // 以迭代器方式输出vector<string>数组对象v的元素值 void output2(vector<string> &v) { // 补足程序 // 。。。 for(auto e:v) { cout<<e<<endl; } }
习题6-17
源码
#include<iostream> using namespace std; int main(){ int *p;//指针指向地址不明,应该赋初始地址 *p=9; cout<<"The value at p:"<<*p; return 0; }
修改
#include<iostream> using namespace std; int main(){ int a; int *p=&a; *p=9; cout<<"The value at p:"<<*p; return 0; }
习题6-18
源码
#include<iostream> using namespace std; int fn1(){ int *p=new int(5);//分配的内存没有释放 return *p; } int main() { int a=fn1(); cout<<"The value of a is:"<<a; return 0; }
修改
#include<iostream> using namespace std; int* fn1(){ int *p=new int(5); return p; } int main() { int *a=fn1(); cout<<"The value of a is:"<<*a; delete a; return 0; }
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)//返回矩阵第i行第j列元素的引用 { float& num = p[(i - 1)*cols + j - 1]; return num; } inline float element(int i, int j) const// 返回矩阵第i行第j列元素的值 { return p[(i - 1)*cols + j - 1]; } 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
Matrix.cpp
#include "matrix.h" #include<iostream> #include<vector> 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 = new float[X.lines*X.cols]; for (int i = 0; i < (X.lines*X.cols);i++) { p[i] = X.p[i]; } } void Matrix::setMatrix(const float *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; } } void Matrix::setElement(int i, int j, int value) { p[(i - 1)*cols + j - 1] = value; } Matrix::~Matrix() { delete[] p; }
main.cpp
#include<iostream> #include"matrix.h" using namespace std; int main() { Matrix m1(5), m2(3, 4); float num[12], num1[25]; for (int i = 0; i < 12; i++) { num[i] = i + 1; } for (int i = 0; i < 25; i++) { num1[i] = i + 1; } m1.setMatrix(num1); m2.setMatrix(num); cout << "矩阵m1为" << m1.getLines() << "行" << m1.getCols() << "列矩阵:"<<endl; m1.printMatrix(); cout << "矩阵m2为" << m2.getLines() << "行" << m2.getCols() << "列矩阵:" << endl; m2.printMatrix(); m1.setElement(1, 2, 10); m1.setElement(3, 4, 20); m2.setElement(2, 2, 22); m2.setElement(3, 4, 19); cout << "矩阵m1为" << m1.getLines() << "行" << m1.getCols() << "列矩阵:" << endl; m1.printMatrix(); cout << "矩阵m2为" << m2.getLines() << "行" << m2.getCols() << "列矩阵:" << endl; m2.printMatrix(); return 0; }
期中
以上是关于实验5的主要内容,如果未能解决你的问题,请参考以下文章
[NTUSTISC pwn LAB 7]Return to libc实验(puts泄露libc中gadget片段定位)