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是有用的,但是使用过程中的困难和麻烦是再所难免的。就像中国人所说的:“如果你掌握了它,便犹如虎添翼。”
阅读(1996) | 评论(0) | 转发(0) |