首先,我想说这是自己做的最烂的一次实验了。。。
发现自己对于new 语句还是不熟悉(要花点时间搞一下了)
#include<iostream> using namespace std; int main() { int *p; *p=9; cout<<"The value at p"<<*p; return 0; }
这里,虽然Devc是可以跑出来的,但是感觉是定义一个指针p的时候,就要让指针有指向,而不是直接对指针的内容赋值。
#include<iostream> using namespace std; int fn1() { int *p=new int (5); return *p; delete p; } int main() { int a=fn1(); cout<<"The value of a is:"<<a; return 0; }
这里书上一开始是没有第{delete p }的,个人感觉,申明了一个空间,之后好是能够回收了的好。
#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 // 为vector<string>数组对象likes添加元素值 ( favorite book, music, film, paintings,anime,sport,sportsman,etc) string s1[8]={"favourite book","music","film","paintings","anime","sport","sportsman","etc"}; for(int i=0; i<8 ; i++ ) { likes.push_back(s1[i]); } cout << "-----I like these-----" << endl; // 调用子函数输出vector<string>数组对象likes的元素值 // 补足代码 // 。。。 output1(likes); // 为vector<string>数组对象dislikes添加元素值 // 补足代码 // 。。。 dislikes.push_back("daxigua"); dislikes.push_back("wangzhe"); dislikes.push_back("smg"); 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(int i=0 ; i<v.size();i++ ) { cout<<v[i]<<endl; } }
这里问题是对于vector数组交换数组内容的时候,如果不用swap的话,应该怎么交换,大小不一的数组直接按照一般数组去复制的话,很有问题。
以下程序表示只能水水,用new int 和指针的话,真的是不会做,还要再研究研究,之后 还会把这条题目发出来的= =
(由于本身就没有做对,我就没用项目的形式)
#include<iostream> using namespace std; class Matrix { public: Matrix(int n); // 构造函数,构造一个n*n的矩阵 ****************************88ok Matrix(int n, int m); // 构造函数,构造一个n*m的矩阵 88888888888888OK Matrix(const Matrix &X); // 复制构造函数,使用已有的矩阵X构造 *****************ok ~Matrix(); //析构函数 **********这里大概是要用到delete,但是只在构造函数里面new int 的话,其他函数不好用= = void setMatrix(const float *pvalue); // 矩阵赋初值,用pvalue指向的内存块数据为矩阵赋值 void printMatrix() const; // 显示矩阵 inline float &element(int i, int j); //返回矩阵第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; //返回矩阵行数 inline int getCols() const; //返回矩阵列数 private: int lines; // 矩阵行数 int cols; // 矩阵列数 float *p; // 指向存放矩阵数据的内存块的首地址 }; Matrix::~Matrix() { } Matrix::Matrix(int n) { lines=n; cols=n; int *a=new int[lines]();//如果再构造函数里面直接申明数组的话,对于其他成员函数调用就。。。。 int *b=new int [cols](); } //一开始准备在这里构造的时候用数组弄一个矩阵,但是 int [lines][cols]不行,用int *p=int new *[lines][cols]也不行= = ,但是分别吧行列堪称两个数组就可以实现 Matrix::Matrix(int n,int m) { lines=n; cols=m; int *a=new int[lines](); int *b=new int [cols](); } Matrix::Matrix(const Matrix &X) { lines=X.lines; cols=X.cols; } //Matrix::setMatrix(const float *pvalue) //{ //} inline int Matrix::getCols() const { cout<<"矩阵的列为:"<<cols<<endl; } inline int Matrix::getLines() const { cout<<"矩阵的行为:"<<lines<<endl; } inline float Matrix::element(int i, int j) const { } void Matrix::setElement(int i, int j ,int value) { cout<<"将第"<<i<<"行"<<"第"<<j<<"列的元素改为"<<value<<endl; for(int a=0 ;a<lines ;a++ ) { for(int b=0 ; b<cols ; b++ ) { if(a==i-1&&b==j-1) cout<<value; else cout<<"1"; } cout<<endl; } } void Matrix::printMatrix() const { for(int i=0; i<lines ;i++) { for(int j=0 ; j<cols ;j++ ) { cout<<"1"; } cout<<endl; } } int main() { Matrix A(5); A.printMatrix(); A.getCols(); A.getLines(); A.setElement(2,2,6); return 0; }//代码问题,这里面的setElement只能对初始的矩阵进行设置元素,并不能继承改后的矩阵造成影响(这里应该是要深复制吧,但是没头绪,求请教)