C++ list容器学习

assign() 给list赋值 
back() 返回最后一个元素 
begin() 返回指向第一个元素的迭代器 
clear() 删除所有元素 
empty() 如果list是空的则返回true 
end() 返回末尾的迭代器 
erase() 删除一个元素 
front() 返回第一个元素 
get_allocator() 返回list的配置器 
insert() 插入一个元素到list中 
max_size() 返回list能容纳的最大元素数量 
merge() 合并两个list 
pop_back() 删除最后一个元素 
pop_front() 删除第一个元素 
push_back() 在list的末尾添加一个元素 
push_front() 在list的头部添加一个元素 
rbegin() 返回指向第一个元素的逆向迭代器 
remove() 从list删除元素 
remove_if() 按指定条件删除元素 
rend() 指向list末尾的逆向迭代器 
resize() 改变list的大小 
reverse() 把list的元素倒转 
size() 返回list中的元素个数 
sort() 给list排序 
splice() 合并两个list 
swap() 交换两个list 
这些是list容器中的一些基本函数。在这里,我们主要讨论容器中的迭代器
迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型。
(1) 每种容器类型都定义了自己的迭代器类型,如vector:
vector<int>::iterator iter;这条语句定义了一个名为iter的变量,它的数据类型是由vector<int>定义的iterator类型。
(2) 使用迭代器读取vector中的每一个元素:
vector<int> ivec(10,1);
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
{
*iter=2; //使用 * 访问迭代器所指向的元素
}
const_iterator:
只能读取容器中的元素,而不能修改。
for(vector<int>::const_iterator citer=ivec.begin();citer!=ivec.end();citer++)
{
cout<<*citer;
//*citer=3; error
}
vector<int>::const_iterator 和 const vector<int>::iterator的区别
const vector<int>::iterator newiter=ivec.begin();
*newiter=11; //可以修改指向容器的元素
//newiter++; //迭代器本身不能被修改 
(3) iterator的算术操作:
iterator除了进行++,--操作,可以将iter+n,iter-n赋给一个新的iteraor对象。还可以使用一个iterator减去另外一个iterator.
const vector<int>::iterator newiter=ivec.begin();
vector<int>::iterator newiter2=ivec.end();
cout<<"\n"<<newiter2-newiter; 

如果在容器中又包含容器的话,就要先修改里面容器,在修改外面容器,才能真正达到修改容器的目的。例如:
void BlobTracker::draw_vidao()
{
	//bl是外层容器,coords是里面的容器
		list<blob>::iterator iter;
		iter = bl.begin();
		unsigned int counter_iter=0;
		while(counter_iter<bl.size())
		{
			blob tmp_blob=*iter;
			list<coord>::iterator coords;
			if((int)(tmp_blob.coords.size())>0)
		{
		//coords
		coords=tmp_blob.coords.end();
		coord crd_pb =(*(--coords));
		crd_pb.fback = cvCreateImage( fsz , IPL_DEPTH_8U ,1 );
		crd_pb.mx=(tmp_blob.min_x+5);
		crd_pb.my=(tmp_blob.min_y+5);
		crd_pb.px=(tmp_blob.max_x-5);
		crd_pb.py=(tmp_blob.max_y-5);
		crd_pb.frame=frame_num;
		cvCopy(back,crd_pb.fback,0);
		*coords=crd_pb;
		*iter=tmp_blob;//重点在句和上一句,一定要先返回给里面的容器,再返回给外面的容器
		}
		iter++;
		counter_iter++;
}
}
小弟基础差,底子薄,如果出错,请指出,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值