A. 向量1(类和对象)
#include<iostream>
using namespace std;
class CVector {
int* data;//存储n维向量
int n; //向量维数。
public:
CVector() {
n = 5;
data = new int[n] {0, 1, 2, 3, 4};
}
CVector(int n1, int* a) {
n = n1;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = a[i];
}
void print() {
for (int i = 0; i < n - 1; i++)
cout << data[i] << " ";
cout << data[n - 1] << endl;
}
~CVector() {
if (data != NULL)
delete[] data;
}
};
int main() {
int n;
cin >> n;
int* data = new int[n];
for (int i = 0; i < n; i++)
cin >> data[i];
CVector CV;
CV.print();
CVector C(n, data);
C.print();
}
B. 向量2(友元及拷贝构造)
#include<iostream>
using namespace std;
class CVector {
int* data;//存储n维向量
int n; //向量维数。
public:
CVector() {
n = 5;
data = new int[n] {0, 1, 2, 3, 4};
}
CVector(int n1, int* a) {
n = n1;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = a[i];
}
CVector(int n1) {
n = n1;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = 0;
}
CVector(CVector& VV) {
n = VV.n;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = VV.data[i];
}
friend CVector Add(const CVector V1, const CVector V2) {
CVector Vsum(V1.n);
for (int i = 0; i < V1.n; i++)
Vsum.data[i] = V1.data[i] + V2.data[i];
return Vsum;
}
void print() {
for (int i = 0; i < n - 1; i++)
cout << data[i] << " ";
cout << data[n - 1] << endl;
}
~CVector() {
delete[]data;
}
};
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
int* p1 = new int[n], * p2 = new int[n];
for (int i = 0; i < n; i++)
cin >> p1[i];
for (int i = 0; i < n; i++)
cin >> p2[i];
CVector CV1(n, p1);
CVector CV2(n, p2);
CV1.print();
CV2.print();
Add(CV1, CV2).print();
}
}
C. 向量3(静态成员)
#include<iostream>
using namespace std;
class CVector {
int* data;//存储n维向量
int n; //向量维数。
static int sum;
public:
CVector() {
n = 5;
data = new int[n] {0, 1, 2, 3, 4};
for (int i = 0; i < n; i++)
sum += *(data + i);
}
CVector(int n1, int* a) {
n = n1;
data = new int[n];
for (int i = 0; i < n; i++){
data[i] = a[i];
sum += data[i];
}
}
void print() {
for (int i = 0; i < n - 1; i++)
cout << data[i] << " ";
cout << data[n - 1] << endl;
}
~CVector() {
delete[] data;
}
static int getsum()
{
return sum;
}
static void setsum()
{
sum = 0;
}
};
int CVector::sum = 0;
int main() {
int t;
cin >> t;
while (t--) {
int m,n;
cin >> m;
for (int i = 0; i < m; i++) {
cin >> n;
int *data = new int[n];
for (int i = 0; i < n; i++)
cin >> data[i];
CVector CV(n, data);
CV.print();
}
cout << CVector::getsum() << endl;
CVector::setsum();
}
}
D. 向量4(类复合)
#include<iostream>
using namespace std;
#include<string>
#include<iomanip>
class CVector {
int* data;//存储n维向量
int n; //向量维数。
public:
CVector() {
n = 5;
data = new int[n] {0, 1, 2, 3, 4};
}
CVector(int n1, int* a) {
n = n1;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = a[i];
}
float Average() {
float a=0.00;
for (int i = 0; i < n; i++)
a += data[i];
a= a/n;
return a;
}
int getn() {
return n;
}
void print() {
for (int i = 0; i < n ; i++)
cout << data[i] << " ";
}
~CVector() {
delete[] data;
}
};
class CStudent {
string name;
CVector score;
public:
CStudent(){}
CStudent(string name1, int n1, int* p):score(n1,p) {
name = name1;
}
void print() {
cout << name << " ";
score.print();
cout <<fixed<<setprecision(2) << score.Average() << endl;
}
};
int main() {
string name;
while (cin>>name) {
int n;
cin >> n;
int* p = new int[n];
for (int i = 0; i < n; i++) {
cin >> p[i];
}
CStudent CS(name, n, p);
CS.print();
}
}
E. 向量5(友元类)
#include<iostream>
using namespace std;
class matrix;
class CVector {
int* data;//存储n维向量
int n; //向量维数。
friend class matrix;
public:
CVector() {
n = 5;
data = new int[n] {0, 1, 2, 3, 4};
}
CVector(int n1, int* a) {
n = n1;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = a[i];
}
CVector(const CVector& C) {
n = C.n;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = C.data[i];
}
int getn() { return n; }
void print() {
for (int i = 0; i < n - 1; i++)
cout << data[i] << " ";
cout << data[n - 1] << endl;
}
~CVector() {
if (data != NULL)
delete[] data;
}
};
class matrix {
int n;
CVector* CV;
public:
matrix() { }
matrix(int n1, int** C) {
n = n1;
CV = new CVector[n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
CV[i].data[j] = C[i][j];
}
}
CVector mutiply(const CVector& C) {
int* p = new int[n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
p[i] += C.data[j] * CV[i].data[j];
}
return CVector(n, p);
}
};
int main() {
int t;
cin >> t;
while (t--) {
int m1, m2;
cin >> m1;
int** p1 = new int* [m1];
for (int i = 0; i < m1; i++)
p1[i] = new int[m1];
for (int i = 0; i < m1; i++)
for (int j = 0; j < m1; j++)
cin >> p1[i][j];
cin >> m2;
if (m1 != m2) {
cout << "error" << endl;
break;
}
int* p2 = new int[m2];
for (int i = 0; i < m2; i++)
cin >> p2[i];
CVector CV(m2, p2);
matrix m(m1, p1);
CVector CV1(m.mutiply(CV));
CV1.print();
}
}
F. 向量6(继承)
#include<iostream>
using namespace std;
#include<string>
class CVector {
protected:
int* data;//存储n维向量
int n; //向量维数。
friend class matrix;
public:
CVector() {
n = 5;
data = new int[n] {0, 1, 2, 3, 4};
}
CVector(int n1) { n = n1; data = new int[n]; }
CVector(int n1, int* a) {
n = n1;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = a[i];
}
CVector(CVector& C) {
n = C.n;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = C.data[i];
}
int getn() { return n; }
void print() {
for (int i = 0; i < n - 1; i++)
cout << data[i] << " ";
cout << data[n - 1] << endl;
}
~CVector() {
if (data != NULL)
delete[] data;
}
};
class stack :public CVector {
int top;
public:
stack() { top = 0; }
stack(int n1) :CVector(n1) { top = 0; }
int gettop() { return top; }
void instack(int n1) {
if(top<n)
data[top++] = n1;
}
void outstack() {
if(top>=0)
data[top--] = NULL;
}
bool judgefull() {
if (top == n) return true;
else return false;
}
bool judgeempty() {
if (top == 0) return true;
else return false;
}
void print() {
for (int i = 0; i < top; i++) {
if (i == top - 1) cout << data[top - 1];
else cout << data[i] << " ";
}
}
};
int main() {
int m, data;
cin >> m;
stack stk(m);
string s;
while (cin >> s) {
if (s == "in"&&stk.gettop()<=m) {
cin >> data;
stk.instack(data);
}
if (s == "out"&&stk.gettop()<=m)
stk.outstack();
if (s == "end") {
stk.print();
continue;
}
else if (stk.gettop() == 0) {
cout << "empty" << endl;
continue;
}
}
}