时间:2021-05-19
总结本人在工作中经验教训。
在使用 list、set 或 map遍历删除某些元素时可以这样使用:
正确使用方法1
复制代码 代码如下:
std::list< int> List;
std::list< int>::iterator itList;
for( itList = List.begin(); itList != List.end(); )
{
if( WillDelete( *itList) )
{
itList = List.erase( itList);
}
else
itList++;
}
正确使用方法2
复制代码 代码如下:
std::list< int> List;
std::list< int>::iterator itList;
for( itList = List.begin(); itList != List.end(); )
{
if( WillDelete( *itList) )
{
List.erase(itList++);
}
else
itList++;
}
正确使用方法3
复制代码 代码如下:
std::list< int> List;
std::list< int>::iterator it, next;
for( it = List.begin(), next = it, next ++; it != List.end(); it = next, ++next)
{
if( WillDelete( *it) )
{
List.erase(it);
}
}
注:方法三更为巧妙,但需注意方法三是用前需要判断容器是否为空,否则迭代器会出问题。
我测试得出,set.erase 不返回迭代器,list返回。
vector 删除操作
复制代码 代码如下:
std::vector <PACK_PRINT>::iterator It ;
for(It=printItems.begin();It!=printItems.end();)
{
//我是说这里怎么判断printItems printItems 里PACK_PRINT.bh =0
if( It.bh ==0) //是这样吗?
{//删除
It=printItems.erase(It);
}
else
{//不删除
++It;
}
}
复制代码 代码如下:
std::vector <PACK_PRINT> printItems;
int i = 0;
while(i < printItems.size())
{
if(printItems[i].bh == 0) //这里比如我想把 printItems 时PACK_PRINT.bh =0 的删除如何写哟。另外这样删除有错吗?
{//删除
printItems.erase(printItems.begin() + i);
}
else
{//不删除
++i;
}
}
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1.连续内存序列容器(vector,string,deque)序列容器的erase方法返回值是指向紧接在被删除元素之后的元素的有效迭代器,可以根据这个返回值来安
在使用STL容器(比如map、list、vector等)的时候,是用放一个对象还是放一个对象指针,即是用vector还是vector,这里的vector可以换成
vector<bool>并不是一个STL容器,不是一个STL容器,不是一个STL容器!首先vector<bool>并不是一个通常意义上的vector容器,这个源
在c++里面不得不提的一个标准库,就是STL,STL包含很多实用的数据结构,如vector,list,map,set等都是我们常用的,而c++11也对STL做了
C++vector中实际删除元素使用的是容器vecrotstd::vector::erase()方法。C++中std::remove()并不删除元素,因为容器的