在for迴圈裡對std::map進行元素移除
#include <string>
#include <map>
#include <algorithm>
#include <vector>
template<class TElement>struct stPrintPairContainerElement
: public std::unary_function<TElement, void>
{
voidoperator()( const TElement& elem )
{
std::cout
<<" : "<< elem.second
<< std::endl;
}
};
template<class TElement>struct stPrintNoPairContainerElement
: public std::unary_function<TElement, void>
{
voidoperator()( const TElement& elem ) const
{
std::cout <<
}
};
template<class TLeft, class TRight>struct stPred
: public std::binary_function<TLeft, TRight, bool>
{
booloperator()( const TLeft& left , const TRight& right) const/// 最後這個const不加不行 {
return left.second == right;
}
};
/// for vector, deque
inline
void vector_erase(TContainer & container, TElement const& elem)
{
container.erase( std::remove(container.begin(), container.end(), elem), container.end() );
}
template <class TContainer, class TPred>
inline
void vector_erase_if(TContainer & container, TPred pred)
{
container.erase( std::remove_if(container.begin(), container.end(), pred), container.end() );
}
/// for list, set, map template <class TContainer, class TElement>
inline
void list_erase(TContainer & container, TElement const& elem)
{
for (TContainer::iterator it = container.begin(); it != container.end();)
{
if (*it == elem)
{
container.erase(it++);
}
else
{
++it;
}
}
}
template <class TContainer, class TPred>
inline
void list_erase_if(TContainer & container, TPred pred)
{
for (TContainer::iterator it = container.begin(); it != container.end();)
{
if (pred(*it))
{
container.erase(it++);
}
else
{
++it;
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
typedef std::map<int, std::string> tMap;
typedef tMap::iterator tMapIterator;
tMap MyMap;
std::string str ="I'm the first!";
MyMap.insert(tMap::value_type(0, str));
str ="I'm the second!";
MyMap.insert(tMap::value_type(1, str));
std::for_each(MyMap.begin(), MyMap.end(), stPrintPairContainerElement< std::pair<int, std::string>>());
list_erase_if( MyMap, std::bind2nd(stPred< std::pair<int, std::string>, std::string>(), str) );
std::cout <<"After erase: "<< std::endl;
std::for_each(MyMap.begin(), MyMap.end(), stPrintPairContainerElement< std::pair<int, std::string>>());
/// for vector typedef std::vector<int> tVector;
typedef tVector::iterator tVectorIterator;
tVector MyVec;
MyVec.push_back(1);
MyVec.push_back(2);
MyVec.push_back(3);
std::cout <<"Before erase: "<< std::endl;
std::for_each(MyVec.begin(), MyVec.end(), stPrintNoPairContainerElement<int>());
vector_erase(MyVec, 1);
std::cout <<"After erase: "<< std::endl;
std::for_each(MyVec.begin(), MyVec.end(), stPrintNoPairContainerElement<int>());
return0;
}
相關推薦
在for迴圈裡對std::map進行元素移除
#include <iostream>#include <string>#include <map>#include <algorithm>#include <vector>template<class TElement>struct s
小猿圈python之一個for迴圈裡對多個列表進行迭代
for迴圈在平時工作中經常會用到,有時候會是好多層迴圈才能達到目的,怎麼多層迴圈才會實現這個功能並保持程式碼的優雅呢?今天小猿圈詳
手動提交事務和在for迴圈裡進行事務控制及宣告式事務的使用例項!
事務場景:需要做一個跑批進行一個流程的實現,0.獲取異常資料(多條),for迴圈對單條資料進行下面三個操作:1).呼叫別的系統進行查詢,2).查詢自己的庫中資料,3)更改自己資料庫中的資料狀態。此時就需要對單條資料操作的3步驟進行事務控制,使用的過程中發現兩個解決辦法:第一:
C++中用for迴圈中對多幅影象進行同樣的處理
問題描述: 有n幅圖,命名分別為Image1.tif,Image2.tif ... ... Imagen.tif 現在要在一個for迴圈中對每幅影象進行同樣的處理,如灰度化,二值化等,需要用到函式
thymeleaf 會對 js 的字元轉義,包括 for 迴圈裡的字元,導致報錯。
發現 thymeleaf 檢查 html 語法也就算了,還會對 js 中的字元進行轉移,導致解析 js 報錯,連 js for 迴圈 都要報錯。 這樣的東西,也敢釋出啊? = = 最後搜來搜去,找到了解決方法:在 js 里加上 /*<![CDATA[*/ 和
for迴圈裡的的相關索引值/閉包
一個小例子 直接使用for迴圈 for(var i=0; i< 6; i++){ console.log(i); } 列印的結果為:1 2 3 4 5 6 但是結合到某一例項,或者建立相關DOM元素後 <div id="box"> <div>盒子1&
JavaScript使用for迴圈和splice刪除陣列指定元素的注意點
在JavaScript裡可以結合for迴圈和splice來刪除陣列指定的元素。但是要注意刪除元素後,陣列索引會發生改變 示例 var arr = ["a","b","c","a",'a',"b"]; var ele = "a"; for(var
js在for迴圈裡新增事件後獲取i
1 <ul> 2 <li index="1">1</li> 3 <li index="2">1</li> 4 <li index="3">1</l
innerHTML在for迴圈裡“只執行一次”的問題(本人小白一枚)
今天在w3school裡系統學習JS的知識時,看到一個TIY,原本程式碼如下: <!DOCTYPE html> <html> <body> <p>點選下面的按鈕,將程式碼塊迴圈五次:</p> <butto
springboot~configserver裡對重要資訊進行RSA加密
簡介 RSA非對稱加密有著非常強大的安全性,HTTPS的SSL加密就是使用這種方法進行HTTPS請求加密傳輸的。因為RSA演算法會涉及Private Key和Public Key分別用來加密和解密,所以稱為非對稱加密。Private Key和Public Key有互操作性,即用private key加密的可
for迴圈、forEach、map、filter區別及效率分析
遍歷陣列最常用到的for迴圈,是最為熟知的一種方法,在ES5中定義了一些新的遍歷方法,更加適用於函數語言程式設計,究竟其用法區別在哪,以及效率如何,接著下來親自做個測試看一下。在Script中寫入, var testData = [];//陣列初始
在foreach迴圈中對list結構進行新增或刪除
在迴圈中對list進行新增或刪除操作,會丟擲currentModifierException,因為在迴圈過程中動態的加入或刪除list元素會導致list的元素數量改變,出現漏項或者無限迴圈等現象。 ·如果要在foreach迴圈中刪除list中的元素,要使用itrator迭代
kotlin 中的 "for" 迴圈和迭代map
文章目錄 ● 場景 ● “for” 迴圈 ● 迭代map ● 總結 場景 kotlin 中的 “for” 迴圈和迭代 map 與我們熟知的 java 中的有什麼區別呢,有哪些更好的表現形式呢? “for” 迴圈
為什麼不建議在for迴圈中使用"+"進行字串拼接
常用的字串拼接方式有五種,分別是使用+、使用concat、使用StringBuilder、使用StringBuffer以及使用StringUtils.join。 用時從短到長的對比:StringBuilder < StringBuffer < concat < + < StringU
Java for迴圈裡i++位置改變的影響
有下面這樣一段Java程式碼: for (int i = 0; i < 3;i++) { System.out.println(i); if (i == 1) { co
for迴圈裡套try-catch-finally,執行流程
package com.demo; public class Test { public static void main(String[] args) throws Exception{ String[] members = new Stri
增強for迴圈對於“二維”陣列進行迴圈的案例
對於“二維”陣列進行foreach迴圈的話可以如下: String name[][] = { { "張三", "李四", "王五" }, { "張六", "李七", "王八" }, { "張九
最簡例子講透for迴圈裡的return、break、continue——尋止
1.測試return List l = new ArrayList(); l.add("0x123"); l.add(false); l.add(0x345); l.add(null); l.add(025); for(int i=0;i&
python學習——讀取染色體長度(七:for循環對染色體序列進行反向互補)
導入模塊 int 終端 染色體 文件名 循環 open sys.argv pan 對fasta文件genome_test.fa中的染色體序列進行反向互補,並輸出到文件genome_test_RC.fa genome_test.fa >chr1ATATATATAT&
關於for迴圈裡的計時器
也算是比較經典的面試題了 for(var i=0;i<5;i++){ console..log(i) }