您的位置:首页 > 编程语言 > C语言/C++

C++ list容器学习

2013-05-15 16:37 495 查看
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++;
}
}
小弟基础差,底子薄,如果出错,请指出,谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: