第9章 顺序容器(2)

9.1.2 容器内元素的类型约束

容器元素类型必须满足以下两个约束:

  • 元素类型必须支持赋值运算。
  • 元素类型的对象必须可以复制。
引用不支持一般意义的赋值运算,因此没有元素是引用类型的容器。

除输入输出(IO)标准库类型之外,所有其他标准库类型都是有效的容器元素类型。特别地,容器本身也满足上述要求。因此可以定义元素本身就是容器类型的容器。

IO库类型不支持复制或赋值。因此,不能创建存放IO类型对象的容器。

1. 容器操作的特殊要求

	vector<MyClass> m(10, 10);
	for(vector<MyClass>::iterator i = m.begin();i!=m.end();++i)
	{
		cout << (*i).Method() << endl;
	}

class MyClass
{
public:
	MyClass()
	{
		this -> i =0;
	}
	MyClass(int i)
	{
		this -> i =i;
	}
	int Method()
	{
		return this -> i;
	}

private:
	int i;
};

其中一种需要外加类型要求的容器操作是指定容器大小并提供单个初始化式的构造函数。如果容器存储类类型的对象,那么只有当其元素类型提供默认构造函数时,容器才能使用这种构造函数。尽管有一些类没有提供默认构造函数,但大多数类类型都会有。

2. 容器的容器

因为容器受容器元素类型的约束,所有可定义元素是容器类型的容器。

必须使用空格隔开两个相邻的>符号,以示这是两个分开的符号,否则,系统会以为>>是单个符号,为右移操作符,并结果导致编译时错误。

	vector<vector<MyClass> > m;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值