effective STL 读书笔记 二

news/2024/5/19 1:10:03 标签: 读书, pair, iterator, string, vector, list

第九条:慎重选择删除元素的方法。


1. 对于一个连续内存的容器(vector , deque, string)最好的办法是使用 erase - remove

   c.erase(remove(c.begin(), c.end(), 1963), c.end());


2. 对list,这一办法同样适用,但是第44条指出,list的成员函数remove更加有效

c.remove(1963)



3.对关联容器怎么删除特定值元素呢。(set , map)

map ,set 删除会使当前迭代器失效,

map<int, string> mapIntStrColl;
map<int, string> ::iterator itor = mapIntStrColl.begin();


for (int i =0; i< 1; ++i)
{
mapIntStrColl.insert(make_pair(1,"s"));
mapIntStrColl.insert(make_pair(2,"s"));
mapIntStrColl.insert(make_pair(3,"s"));
mapIntStrColl.insert(make_pair(4,"s"));
mapIntStrColl.insert(make_pair(5,"s"));
mapIntStrColl.insert(make_pair(6,"s"));
}
for (itor = mapIntStrColl.begin(); itor != mapIntStrColl.end(); )
{
if (itor->first == 1)
{
mapIntStrColl.erase(itor++);
}
else{
++itor;
}



}


for(itor = mapIntStrColl.begin(); itor != mapIntStrColl.end(); ++ itor)
{
cout << itor->first << " "<<(itor->second).c_str() << endl;
}


4. 对于序列容器的删除。删除的时候不仅会使当前迭代器失效也回使以后迭代器失效。故

vector<int> VectorIntColl;
vector<int> ::iterator itor;
for (int i = 0 ; i< 10 ; ++ i)
{
VectorIntColl.push_back(i);
}
    
for (itor = VectorIntColl.begin(); itor != VectorIntColl.end();  )
{
if (*itor == 7)
{
itor=VectorIntColl.erase(itor);
}
else
++ itor;
}
for (itor = VectorIntColl.begin(); itor != VectorIntColl.end(); ++ itor)
{
cout <<  *itor << endl;
}


http://www.niftyadmin.cn/n/1404331.html

相关文章

WinCE控制面板添加应用程序

WinCE系统中的控制面板和Windows系统中的控制面板原理是一样的&#xff0c;里面就是包含了一些应用程序。WinCE系统的控制面板由Ctlpnl.exe&#xff0c;Control.exe和一些.cpl文件组成&#xff0c;其中Ctlpnl.exe和Control.exe用于控制控制面板的文件夹显示和架构&#xff0c;而…

逆序的三位数 (10 分) python版

逆序的三位数 (10 分) python版 程序每次读入一个正3位数&#xff0c;然后输出按位逆序的数字。注意&#xff1a;当输入的数字含有结尾的0时&#xff0c;输出不应带有前导的0。比如输入700&#xff0c;输出应该是7。 输入格式&#xff1a; 每个测试是一个3位的正整数。 输出…

Nsis 学习心得

可以自己制作个性化软件了使用NSNI 增加BrandingText "XXX" 就可以了啊 NSIS 学习心得之BrandingText NSIS 一个优秀的开源安装制作软件&#xff1b;在学习使用过程中碰到了个人的一个问题&#xff1b;就是绑定默认的Nsis system V.只需在这个ShowInstDetails 过…

WINCE启动画面

这段时间在调WINCE的启动画面程序&#xff0c;按着网上说的&#xff0c;先自己制作一幅位图&#xff0c;然后用工具bmp2T.exe转换成数组&#xff0c;把数组拷到/smdk2440/KERNEL/HAL/samsunga_70.c中&#xff08;我用的是三星2440的板子&#xff0c;7寸的屏&#xff09;。最后在…

使用swap技巧除去多余的容量 STL 第17条

我们知道Vector容器删除元素的时候&#xff0c;容器的内存大小并不会减少&#xff0c;但是怎么给容器瘦身呢。这里我们可以使用swap技巧。 举例 int main(int argc,char* argv[]) { vector<int> vectorIntColl; vector<int>::iterator itor vectorIntColl.begin(…

浅谈USB设备的VID和PID

根据USB规范的规定&#xff0c;所有的USB设备都有供应商ID&#xff08;VID&#xff09;和产品识别码&#xff08;PID&#xff09;&#xff0c;主机通过不同的VID和PID来区别不同的设备&#xff0c;VID和PID都是两个字节长&#xff0c;其中&#xff0c;供应商ID&#xff08;VID&…

不用vectorbool

1. 明天接着讨论

TCPMP中使用GDI、Direct及DirectDraw效果对比

早先跟ZL讨论过WinCE6.0下使用TCPMP播放视频的问题。他认为直接写显存应该可以让视频播放更流畅。今天我在我们的平台上实际测试了一下&#xff0c;分别使用GDI、Direct和DirectDraw三种方式做了Benchmark&#xff0c;其中Direct就是他所说的直接写显存的方式。 为了让TCPMP支持…