Chinaunix首页 | 论坛 | 博客
  • 博客访问: 99278
  • 博文数量: 27
  • 博客积分: 550
  • 博客等级: 下士
  • 技术积分: 240
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-20 10:47
文章分类
文章存档

2014年(1)

2011年(26)

分类: C/C++

2011-01-21 16:04:52

Embed Templates(嵌入式模版)和Derive Templates(基模板)

每当你使用一个普通的类的时候,你也可以在其中使用一个STL类。它是可以被嵌入的:

class CParam
{
string name;
string unit;
vector vecData;
};


或者将它作为一个基类:

class CParam : public vector
{
string name;
string unit;
};


STL模版类作为基类时需要谨慎。这需要你适应这种编程方式。

模版中的模版

为构建一个复杂的数据结构,你可以将一个模板植入另一个模板中(即“模版嵌套”)。一般最好的方法是在程序前面使用typedef关键字来定义一个在另一个模板中使用的模版类型。

// 程序:在向量中嵌入向量的演示。
//目的:说明怎样使用嵌套的STL容器。

#include
#include

using namespace std;

typedef vector VEC_INT;

int inp[2][2] = {{1, 1}, {2, 0}};
// 要放入模板中的2x2的正则数组

int main(int argc, char* argv[])
{
int i, j;
vector vecvec;
// 如果你想用一句话实现这样的嵌套,你可以这样写:
// vector > vecvec;

// 将数组填入向量
VEC_INT v0(inp[0], inp[0] 2);
// 传递两个指针
// 将数组中的值拷贝到向量中
VEC_INT v1(inp[1], inp[1] 2);

vecvec.push_back(v0);
vecvec.push_back(v1);

for (i=0; i<2; i )
{
for (j=0; j<2; j )
{
cout << vecvec[i][j] << " ";
}
cout << endl;
}
return 0;
}

// 输出:
// 1 1
// 2 0


虽然在初始化时很麻烦,一旦你将数据填如向量中,你就实现了一个变长的可扩充的二维数组(大小可扩充直到使用完内存)。根据实际需要,可以使用各种容器的嵌套组合。

总结

STL是有用的,但是使用过程中的困难和麻烦是再所难免的。就像中国人所说的:“如果你掌握了它,便犹如虎添翼。”
阅读(1987) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~