c++如何实现建立一个IVector类用来存放整型数组,,求帮忙编程制作。

整型相量IVector类的实现。建立一个IVector类用来存放整型数组,数组存放在动态分配的存储空间。该类拥有至少但不限于以下成员函数:构造函数:为对象分配动态存储空间,完成初始化,要考虑多种参数的重载形式,例如无参数、参数类型为int;析构函数:将占用的动态存储空间释放;拷贝构造函数:实现对象之间的深拷贝构造;at 函数:返回第i个元素,类似C数组,索引从0开始;front 函数:返回首元素;back 函数:返回尾元素;size 函数:返回数组的大小,即元素个数;sort 函数:将数组元素按值大小进行升排序;pop_back 函数:增加一个数据到末尾;push_back 函数:删除末尾的一个数据;重载了以下运算符:= 运算符:实现IVector对象之间的深拷贝赋值;+ 运算符:将两个IVector对象首尾相连;[] 运算符:访问IVector对象中某个下标位置的字符;<<运算符:输出IVector对象的所有元素;自行设计类中的数据成员和其它内容,并编写测试代码使用该IVector类。

在要求基础上还扩展了几种比较常见的操作符和构造函数

#include <iostream>
#include <algorithm>
using namespace std;
class IVector
{
int *v;
int s;
public:
IVector();
IVector(int);
IVector(int *, int);
~IVector();
IVector(const IVector &);
int at(int) const;
int front()const;
int back()const;
int size()const;
void sort();
int pop_back(int);
int push_back();
IVector & operator = (IVector const & );
IVector &operator+=(IVector const &);
IVector operator+(IVector const & );
int operator[](int ) const;
int &operator[](int);
friend ostream & operator<<(ostream & , const IVector& );
};
IVector::IVector():v(NULL),s(0)
{
}

IVector::IVector(int value):s(1)
{
v = new int[1];
*v = value;
}

IVector::IVector(int *value, int number):v(NULL),s(0)
{
if(number <= 0 || value == NULL) return;
s = number;
v = new int [number];
int i;
for(i = 0; i < s; i ++)
v[i] = value[i];
}

IVector::~IVector()
{
if(v) delete []v;
}

IVector::IVector(const IVector &a):v(NULL),s(0)
{
if(a.s == 0 || a.v == NULL) return;
s = a.s;
v = new int [s];
int i;
for(i = 0; i < s; i ++)
v[i] = a[i];
}

int IVector::at(int i) const
{
return v[i];
}

int IVector::front()const
{
return v[0];
}

int IVector::back()const
{
return v[s - 1];
}

int IVector::size()const
{
return s;
}

void IVector::sort()
{
if(s <= 1) return ;
std::sort(v, v+s);
}

int IVector::pop_back(int value)
{
int *n(v);
if(n)
{
v = new int[s+1];
int i;
for(i = 0; i < s; i ++)
v[i] = n[i];
delete n;
}
v[s++] = value;
return s - 1;
}

int IVector::push_back()
{
s --;
return v[s];
}

IVector & IVector::operator = (IVector const & a)
{
if(v) delete [] v;
v = NULL;
s = 0;
if(a.s == 0 || a.v == NULL) return *this;
s = a.s;
v = new int [s];
int i;
for(i = 0; i < s; i ++)
v[i] = a[i];
return *this;
}

IVector &IVector::operator+=(IVector const &a)
{
if(a.s == 0 || a.v == NULL) return *this;
int *n = new int [s + a.s];
int i, j;
for(i = 0; i < s; i ++)
n[i] = v[i];
for(j = 0; j < a.s; j ++)
n[i+j] = a[j];
s+=a.s;
if(v) delete[]v;
v = n;
return *this;
}

IVector IVector::operator+(IVector const & a)
{
IVector t(*this);
t += a;
return t;
}

int IVector::operator[](int i) const
{
return v[i];
}

int &IVector::operator[](int i)
{
return v[i];
}

ostream & operator<<(ostream & os, const IVector& a)
{
if(a.v == NULL || a.s == 0) 
os << "NULL";
else
{
int i;
for(i = 0; i < a.s; i ++)
{
if(i) os << ' ';
os << a[i] ;
}
}
return os;
}


int main()
{
IVector a;
cout << "no parameter IVector " << a << endl;
IVector b(1);
cout << "IVector(int) " << b << endl;
int arr[] = {6,5,7,1,6,3,4};
IVector c(arr, 7);
cout << "IVector(int *, int)" << c << endl;
IVector d(c);
cout << "IVector(const IVector &);" << d << endl;
cout << "d.at[3] = " << d.at(3) << endl;
cout << "d.front = " << d.front()<< endl;
cout << "d.back = " << d.back()<< endl;
cout << "d.size = " << d.size()<< endl;
d.sort();
cout << "after sort " << d << endl;
cout << "test pop_back and push_back\nlooks like name wrong in these two functions\n";
cout << "pop back = " << d.pop_back(10) << endl;
cout << "after pop back " << d << endl;
cout << "push back = " << d.push_back() << endl;
cout << "after push back " << d << endl;
IVector e;
e = b;
cout << "test operator = :\n" << e << " = " << b << endl;
cout << e << "+=" << d << ":\n";
e += d;
cout << e << endl;
cout << b << " + " << c << " = " << b + c << endl;
cout << c<< '[' << 3<<']' << '=' << c[3] << endl;
cout << "c=" << c << endl << "c[2] = 100, then c = ";
c[2] = 100;
cout << c << endl;
return 0;

}
温馨提示:内容为网友见解,仅供参考
无其他回答

C++定义一个类,类的对象是vector,vector的元素是数组,用C++该怎么表示...
1. 使用vector<int*> vec这样的定义,访问数组数据时用计算地址的方法代替索引。比如:int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,};vec.push_back(a);int res = *(vec[0] + 3); \/\/ res = 3 2.使用一个类对数组进行一次包装,然后重载该类的=操作符。比如:class A ...

vector c++ 用法是什么?
1、首先,打开c++编译器,构造一个int类型的空vector向量。2、程序运行结果如图,可以看到vector的size为0。3、如红框勾选所示,构造了6个元素值为20的vector向量。4、运行结果显示,成功的构造了6个元素为20的向量。5、以现有vector对象的范围作为构造函数的参数,同样也将对象复制给另一个vector对象。

c++中vector的用法详解
include <iostream> #include <vector> int main() { std::vector<int> v; \/\/ 创建一个空的vector v.push_back(1); \/\/ 向vector中添加一个元素 v.push_back(2); \/\/ 向vector中添加一个元素 v.push_back(3); \/\/ 向vector中添加一个元素 for (int i = 0; i < v.size(); i+...

c++vector用法
二、我们也可以使用at访问:vector<int>test;\/\/建立一个vector test.push_back(1);test.push_back(2);\/\/把1和2压入vector这样test[0]就是1,test[1]就是2 int i =test.at(1);\/\/i为2

C++ vector用法是什么?
vector容器类型\\x0d\\x0a vector容器是一个模板类,可以存放任何类型的对象(但必须是同一类对象)。vector对象可以在运行时高效地添加元素,并且vector中元素是连续存储的。\\x0d\\x0avector的构造\\x0d\\x0a \\x0d\\x0a函数原型:\\x0d\\x0atemplate\\x0d\\x0a explicit vector(); \/\/ ...

vector c++ 用法
一、vector的初始化 (1) vectorint a(10); \/\/定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。includeiostream includemath.h includevector using namespace std;int main(){ vectorint a(10);for(int i=0;ia.size();i...

c++ vector元素[i] 做函数参数怎么写?
\/\/给你一个例子:#include <iostream>#include <vector>using namespace std;void fun(int &a){ \/\/对传进来的地址中内容自加1 a++;}void print(int a){ \/\/输出传出来的内容 cout<<a<<endl;}int main(){ int a[5] = {1,2,3,4,5}; \/\/通过数组a的地址初始化,注意地...

C++如何实现vector里面的元素循环?
C++中的vector是一种动态数组,可以方便地存储和使用多个元素。如果你想要实现vector里面的元素循环,可以考虑以下几种方法。使用for循环:你可以使用一个for循环来遍历vector中的每个元素,并对其进行相应的操作。例如,你可以使用索引来访问每个元素,然后根据需要进行相应的处理。在遍历到vector的末尾时,你...

3.设计一个完整的C++程序定义一个类模板,利用它实现10个整数、浮点数...
以下是一个示例C++程序,使用类模板实现对整数、浮点数和字符进行排序:include <iostream> include <vector> include <algorithm> template<typename T> class Sorter { public:Sorter(const std::vector<T>& data) : data_(data) {} void Sort() { std::sort(data_.begin(), data_.end());...

c++在一个类里面定义了一个Vector要素,怎么实现Vector的clear和push...
程序不会给你创建无参构造函数,导致在另一个类中无法创建一个实例,所以最好使用成员初始化列表来初始化构造函数。 第二个同理 friend ostream& operator <<(ostream& output,Vector &A); 这个就是运算符逗<<地的重载函数,就是你的类可以直接调用<<这个方法 ...

相似回答