vector和map 容器的區別
1)vector為順序容器,erase迭代器不僅使所有指向被刪元素的迭代器失效,而且使被刪元素之後的所有迭代器失效,所以不能使用erase(iter++)的方
式,但是erase的返回值為下一個有效的迭代器:可以這樣使用:
for( iter = c.begin(); iter != c.end(); )
iter = c.erase(iter);
2)erase迭代器只是被刪元素的迭代器失效:所以可以這樣使用:
for( iter = c.begin(); iter != c.end(); )
c.erase(iter++);
正因為:map erase 會使被刪元素的迭代器失效:所以在使用map iterator時候要注意:
一種很常見的錯誤是:
for ( map<int, string>::iterator it = str_map.begin(); it!=str_map.end(); it++ ) {
str_map.erase(it);
}
刪除操作會使it亂掉,再使用it++就出錯了。正確的做法是:
for ( map<int, string>::iterator it = str_map.begin(); it!=str_map.end(); ) {
if ( some_condition ) {
str_map.erase(it++);
} else {
it++;
}
}
3)Map可以通過key查詢元素,而vector查詢元素也類似,通過值查詢;
4)對於vector的值得注意的地方,可以對vector呼叫排序演算法,舉例如下:
typedef struct {
std::string strName;
int money;
}company_person;
然後可以按照strName進行排序;我在一個專案中用到過這個,在一個專案中,客戶端以隨機的傳送strName,然後在服務端對他們進行重新排序;
5)map和vector 插入元素的方式不一樣,map沒有push_back這樣的函式,只有insert依次插入元素,或者直接通過建構函式初始化;
轉轉::http://blog.csdn.net/smilestone_322/article/details/7976764