回 帖 发 新 帖 刷新版面

主题:小弟这儿有道不错的程序,求高手帮忙解决!谢谢!

数组是一种十分常用的数据结构,通过数组,我们可以得到一块连续的内存空间,可以方便地通过下标操作(”[]”)获取数组中的任何一个元素。但是,数组的大小不能动态增长;
数组也不能让你方便地在数组最后插入一个元素,你必须保存当前的最后一个元素所在数组中的位置才能完成上述的功能。
在此,我们设计了一个类似数组的新类,使之能够成为一个更加易用的数据结构,能够方便地对整型元素进行操作,我们称它为”整型向量”,定义如下:
class IntVector
{
public:
// Constructor
enum{ INITIAL_SIZE = 20 }; // The default initial capacity of IntVector
explicit IntVector( size_t size = INITIAL_SIZE );
~IntVector();
public:
// Member functions
void push_back(int); // Add an item to the end of IntVector
void pop_back() const; // Delete an item at the end of IntVector
int& back(); // Return the reference to the last item of IntVector
size_t size() const; // Return the number of item in IntVector
bool empty() const; // Test if IntVector is empty
// Operator
int& operator [] ( size_t index ); // Return the reference to the IntVector
// item at a specified position
protected:
int* m_pIntArr; // The point to the integer array
size_t m_uiSize; // The number of item in IntVector
size_t m_uiCapacity; // The number of items that IntVector could
// contain without allocating more storage
};

.. 通过以上定义的IntVector类,我们可以方便地定义一个整型向量,并有以下功能:
1. 可以定义一个整型向量(基于数组实现,其中的元素在内存中是连续分布的),并可以指定其初始的容量大小,默认的初始容量为20。
2. 可以将一个新的整型元素添加到整型向量中最后一个元素的后面。
3. 添加元素时,当向量中的元素个数已达向量容量的大小时,可以分配更大的内存空间,并完成新元素的添加。
4. 可以删除位于整型向量中的最后一个元素。
5. 可以获得位于整型向量中的最后一个元素的引用。
6. 可以获得整型向量中现有元素的个数。
7. 可以判断整型向量中是否没有元素。
8. 可以通过下标操作(”[]”),直接获得整型向量中指定位置元素的引用。
9. 不考虑整型向量的最大容量。
.. 基于IntVector类,可以通过以下代码并得到相应的输出。
void main()
{
IntVector intVec;
for ( int i = 0; i <30; ++i )
intVec.push_back(i+1);
for ( i = 0; i < 10; ++i )
{
intVec[i] = intVec.back();
intVec.pop_back();
}
int intTemp = 0;
for ( i = 0; i < 10; ++i )
{
intVec.push_back(i+1);
intTemp = intVec.back();
intVec.back() = intVec[i];
intVec[i] = intTemp;
}
cout << “The size of IntVector is: ” << intVec.size() << endl
<< “The items in IntVector are listed as follows:” << endl;
for ( i = 0; i < intVec.size(); ++i )
cout << intVec[i] << “; ”;
}

.. 得到的屏幕输出为:
The size of IntVector is: 30
The items in IntVector are listed as follows:
1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; 30; 29; 28; 27; 26; 25; 24;
23; 22; 21;
上述的IntVector类要比整型数组更易用,而且功能也更加强大。但是它只能用于整型元素的存储,若是需要在向量中存储字符型、浮点型等内部类型的元素,亦或是自定义类型
的元素,则必须分别定义相应的字符向量类、浮点数向量类、亦或是自定义类型的向量类。
所以,若是能够设计一个模板向量类,就能够“一劳永逸”了。
.. 现请设计出一个模板类(包括类的定义与其成员函数的实现),用于实现任何类型元素的向量存储。
具体要求如下:
1. 将模板类命名为TemplateVector,其成员函数的函数名称、参数列表和IntVector类中的相同(push_back()的参数自然应该不同);并使TemplateVector类具有以下功能:
1) 可以定义任意类型元素的向量(基于数组实现,其中的元素在内存中是连续分布的),并可以指定其初始的容量大小,默认的初始容量为20。
2) 可以将一个新的元素添加到向量中最后一个元素的后面。
3) 添加元素时,当向量中的元素个数已达向量容量的大小时,可以分配更大的内存空间,并完成新元素的添加。
4) 可以删除位于向量中的最后一个元素。
5) 可以获得位于向量中的最后一个元素的引用。
6) 可以获得向量中现有元素的个数。
7) 可以判断向量中是否没有元素。
8) 可以通过下标操作(”[]”),直接获得向量中指定位置元素的引用。
9) 可以不考虑向量的最大容量。
2. 需要考虑TemplateVector类的健壮性。
3. 不能有内存泄露。

回复列表 (共1个回复)

沙发

有创意
楼主能不能用pascal写一下
感激不尽

我来回复

您尚未登录,请登录后再回复。点此登录或注册