Assignment 10 Template
数组是一种十分常用的数据结构,通过数组,我们可以得到一块连续的内存空间,可以
方便地通过下标操作(”[]”)获取数组中的任何一个元素。但是,数组的大小不能动态增长;
数组也不能让你方便地在数组最后插入一个元素,你必须保存当前的最后一个元素所在数组
中的位置才能完成上述的功能。
在此,我们设计了一个类似数组的新类,使之能够成为一个更加易用的数据结构,能够
方便地对整型元素进行操作,我们称它为”整型向量”,定义如下:
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. 不能有内存泄露。
4. 程序必须有一个main()函数,其中可以有一些同学用于测试的代码,也可以为空。
5. 一律使用Win32 Console 完成此次作业。
6. 去掉Debug 文件夹和.exe 可执行文件,打包上传。