日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STL常用技巧.

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

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成員函數是去除特定值的元素的最佳方法

c.remove(1963);

?

3)如果容器是標準關聯容器,使用它的erase成員函數,例如:

//?c是標準關聯容器時,erase成員函數是去除特定值的元素的最佳方法

c.erase(1963);

?

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

?bool badValue(int x);?? // 函數定義:返回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???? 如果容器是標準關聯容器,使用remove_copy_ifswap

o???? 如果需要寫一個循環遍歷容器元素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循環的第三部分是空的,i在后面自增。

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

{

??? if (badValue(*i))

??? {

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

??? }

??? else

??? {

??????? ++i;

??? }

}(#add 妙哉)

?

轉載于:https://www.cnblogs.com/weiqubo/archive/2011/05/31/2064955.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。