主要内容如下:
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()函数,其中可以有一些同学用于测试的代码,也可以为空。 题目可能比较长,本来想删掉一些的,但不知道该删什么好,所以就全给弄上来了,还请各位高手帮忙看看。
不是小弟懒惰,只是马上就要期末考试了,还有许多课没有复习,而如果要去做这个作业的话,会花很多时间(我才刚刚上大一,刚学C++没多久),所以就帖出来求助各位编程高手,解决小弟的燃眉之急,不胜感激!

解决方案 »

  1.   

    不可使用vector,不是说不可以使用vector的代码
      

  2.   

    虽然是作业,但态度还算诚恳。
    这个题,去拷stl的源码不就得了。
      

  3.   

    这个题太简单了,是不是让你可以调用现有的IntVector?int和指针是一样大的,那就好说了,你做一个模板包装一下就OK了,so easy
      

  4.   

    template<typename T>
    class TemplateVector : public IntVector
    {
    void push_back(T& t)
    {
    IntVector::push_back((int)(void *)&t)
    }; // Add an item to the end of IntVector T& back()
    {
    return *((T*)(void*)IntVector::back());
    }; // Return the reference to the last item of IntVector // Operator 
    T& operator [] ( size_t index )
    {
    return *((T*)(void*)IntVector::operator[](index));}; // Return the reference to the IntVector 
    }