日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

STL常用技巧.

發(fā)布時間:2025/7/25 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STL常用技巧. 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1

比如:vector vecID; 中保存了m個ID,這時要刪除第n個ID。

遍歷是一個方法;即vector::itertor it = vecID.begin(); 然后++it n次。

更好的方法是:vector::itertor it = vecID.begin() + n; vector的迭代器直接支持這種偏移。

然后用vecID.erase(it)方法 刪除該元素。

?

2.去除一個容器中有特定值的所有對象

1)如果容器是vectorstringdeque,使用erase-remove慣用法,例如

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

?

2)如果容器是list,使用list.remove

// clist時,remove成員函數(shù)是去除特定值的元素的最佳方法

c.remove(1963);

?

3)如果容器是標準關(guān)聯(lián)容器,使用它的erase成員函數(shù),例如:

//?c是標準關(guān)聯(lián)容器時,erase成員函數(shù)是去除特定值的元素的最佳方法

c.erase(1963);

?

3.去除一個容器中滿足一個特定判定式所有對象

?bool badValue(int x);?? // 函數(shù)定義:返回x是否是“bad

o???? 如果容器是vectorstringdeque,使用erase-remove_if慣用法:

// cvectorstringdeque時這是去掉badValue返回真的對象的最佳方法

c.erase(remove_if(c.begin(), c.end(), badValue),c.end());

o???? 如果容器是list,使用list.remove_if

// clist時這是去掉badValue返回真的對象的最佳方法

c.remove_if(badValue);

o???? 如果容器是標準關(guān)聯(lián)容器,使用remove_copy_ifswap

o???? 如果需要寫一個循環(huán)遍歷容器元素erase,注意iterator的遞增邏輯

// 錯誤代碼:當容器的一個元素被刪時,指向那個元素的所有迭代器都失效了

AssocContainer<int> c;

// 不要這么做!

for (AssocContainer<int>::iterator i = c.begin(); i!= c.end(); ++i)

{??????????????????????????????????????????

??? if (badValue(*i))

??? {

??????? c.erase(i);

??? }

}

?

// 正確代碼:

AssocContainer<int> c;

// for循環(huán)的第三部分是空的,i在后面自增。

for (AssocContainer<int>::iterator i = c.begin(); i != c.end();)

{

??? if (badValue(*i))

??? {

??????? i = c.erase(i);?//僅適用序列容器,關(guān)聯(lián)容器用c.erase(i++); 因關(guān)聯(lián)容器erase 返回void,

??? }

??? else

??? {

??????? ++i;

??? }

}(#add 妙哉)

?

轉(zhuǎn)載于:https://www.cnblogs.com/weiqubo/archive/2011/05/31/2064955.html

總結(jié)

以上是生活随笔為你收集整理的STL常用技巧.的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。