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;
如果在容器中又包含容器的话,就要先修改里面容器,在修改外面容器,才能真正达到修改容器的目的。例如:
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++;
}
}小弟基础差,底子薄,如果出错,请指出,谢谢。
相关文章推荐
- c/c++学习之c++ 中的list <>容器
- c++ 容器(list学习总结)
- C++学习笔记:List容器
- C++学习:list容器详解(二)
- 【C++ STL学习之四】容器list深入学习
- 【C++ STL学习之四】容器list深入学习
- C++ STL学习笔记四 list双向链表容器
- C++学习:list容器详解
- 【C++ STL学习之四】容器list深入学习
- c++学习笔记之vector容器与list容器
- C++学习:list容器详解(一)
- C++学习:list容器详解(一)
- C++ STL学习笔记四 list双向链表容器
- C++学习:list容器详解(一)
- 【C++ STL学习之四】容器list深入学习
- C++学习:list容器详解(二)
- C++学习笔记-List容器
- 【C++ STL学习之四】容器list深入学习
- 【C++】vector容器和list容器中使用单个迭代器的erase函数学习笔记
- C++STL学习(3)容器list