首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

习题

1. 重写6.1节中的stack<T>,使它能够接受一个整型值作为栈的默认长度。实现后客户端代码可以使用如下声明:

stack<int, 100> s1, s2;

stack<char, 5000> sc1, sc2, sc3;

试讨论这种额外的参数化的优缺点。

2. 为定长栈定义一个模板,使它能够自动分配一个在编译时确定长度的数组来存储栈中的值。

3. 代码

#define CUBE(X) ((X)*(X)*(X))

的作用与代码

template<class T> T cube (T x){ return x * x * x;}

不同。试解释当调用cube(sqrt(7))时,它们的区别是什么?什么时候这两种编码方式会产生不同的结果?

4. 使用下面的定义编写一个泛型函数exchange()并测试。

  template<class TYPE>

  void exchange(TYPE& a, TYPE& b, TYPE& c)

  {

        // replace a's value by b's and b's by c's

        // and c's by a's

  }

5. 编写一个泛型函数,使它对任意类型的数组和数组长度都能够按照下面的规则排列数组中的各个元素。

a[1] = a[0] , a[2] = a[1], ·····,

a[size - 1] = a[size - 2], a[0] = a[size - 1]

6. 为6.5节中的vect_it程序编写一个成员函数模板来打印完整的vector。

<class T> void vector<T>::print()

7. 重新编写重载的赋值运算符使它更加通用。

template <class T>

vector<T>& vector<T>::operator=(const vector<T>& v)

// allow different size vectors to be assigned

// must delete and reallocate storage for left-hand

// argument and avoid in a = a 

8. 编写一个泛型函数,可以交换两个不同类型的vector<T>(见6.5节)。假设两个数组类型的元素可以进行赋值转换。

9. 自行选择一种排序算法(不能使用快速排序法),使用vector<T>和它相关的迭代器类,编写一个泛型vector内部排序例程(见6.5节)。分别使用含有100个、1000个和10000个元素的vector进行测试,试比较该算法和STL中的排序例程的运行时间。

10. (项目)创建一个参数化字符串类型,它是一个包含对象class T的容器类。在原型范例中,对象是一个char,通常的字符串结束标志是0。实现该类型的标准做法是应该模仿string库中的函数。类定义中也可以对结束标志进行参数化,标准库string中也有这样的类型。

11. 排序函数“天生”就适合进行参数化。使用模板重写下面的普通冒泡排序算法。

void bubble(int d[], int how_many)

{

   int temp;

   for (int i = 0; i < how_many - 1; ++i)

      for (int j= 0; j < how_many - 1 - i; ++j)

         if (d[j] < d[j + 1]) {

            temp = d[j];

            d[j]= d[j + 1];

            d[j + 1] = temp;

         }

}

如果使用一个类进行实例化,但是类中没有定义operator<(),将会出现什么结果?将char*字符串按字典顺序排序需要做些什么工作?

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论