1樓:赫迪夫
這種情況一般是執行緒未同步引起的。
stl不是執行緒安全的,如果你在多個執行緒中同時操作同一個map,你就必須自己進行同步。
2樓:匿名使用者
額...我也遇到了這個問題,要是有答案一定要回答一下我...
3樓:手機使用者
不給**讓別人怎麼幫你分析錯誤啊。既然出錯了顯然是你stl沒有正確使用的結果,你又不給**,你這些gdb資訊只能粗略判斷錯在什麼位置,根本不能判斷是什麼錯誤。
c++ stl map 中erase()後++會指向那個元素?以及erase後map將會自動做什麼操作(也就是會怎麼變動)?
4樓:叫啥才行你說
map的erase()有三個過載函式,你說的是哪個? 如果是根據key值來刪除,成功返回1,失敗返回0.如果根據迭代器刪除單個,迭代器要後++,因為刪除了的迭代器會失效,所以要指向下一個。
如果是根據迭代器刪除一片的話,要重新指定迭代器。
c++ map erase問題
5樓:匿名使用者
erase返回一個空值,這時候iterator存放的值還是被刪除的元素,++後有可能指向被刪除前一個元素,有可能指向被刪除後一個元素。
測試**:
#include
#include
#include
using namespace std;
int main(int argc, char **argv)printf("----%d\n\n", mymap.size());
return 0;}
6樓:匿名使用者
int main()}
c++stl裡面的map.erase(...)
7樓:
你不會是在迴圈裡用erase吧。
這樣的原先的迭代器就失效了。
你說的delete是什麼?
同時erase是返回下一個迭代器。因為要用map stl
for(it = stl.begin(); it != stl.end())
8樓:匿名使用者
崩潰的緣故一般是指標的問題。 如果一個指標指向了未知的地方,而你又呼叫了delete。那麼後果是不可預料的,往往都是崩潰的。
所以,你在清楚的時候,map裡面的成員函式有野指標沒有處理。
c++ 多執行緒讀寫map 怎麼加鎖
9樓:匿名使用者
多執行緒同步機制都是一樣的套路
在寫和讀的時候進行加鎖,用完立馬釋放,不要在鎖過程中進行冗長的操作就行了。
c++ 關於map的begin()與rbegin()
10樓:匿名使用者
map的erase的過載版本之一定義如下:
iterator erase(iterator _where);
它的引數是iterator
而rbegin()的返回值是reverse_iterator,與所需引數不一致,也不能自動轉換版,因此語句不合
權法但是,可以使用erase的另一個過載版本:
size_type erase(const key_type& _key);
此時,語句應該寫成如下的形式:
m.erase(m.rbegin()->first);
這樣就可以成功呼叫了
11樓:匿名使用者
改一下這兩行:
vstr::reverse_iterator i;
for(i=chinese.rbegin();i!=chinese.rend();++i)
我改後就可以執行了。
關於stl map自動解構函式,該怎麼處理
12樓:歐章旭
c++中stl的vector容器的解構函式不用自己呼叫,系統會進行析構,但是vector內元素的清空需要手動進行。
非指標的資料型別,比如 int、string、char ,還包括自定義的資料結構、自定義的類 等等只需要手動呼叫vector的clesr函式就可以了,空間的釋放和析構系統都會自動進行。
指標型別的資料,這種情況需要手動進行釋放。也就是說new 產生的記憶體需要手動使用free進行釋放。
c++ stl中map的問題
13樓:裸跳的螞蚱
你犯了一個錯誤,就是map的[ ]是過載的。比如你寫的map[1],當呼叫這個函式時,它會檢查map中是否有key為1的pair。如果沒有就新增。
所以你使用map[1]這種形式總會有值輸出。另外map使用的並不是陣列,而是紅黑樹。
c++中的erase操作
14樓:匿名使用者
if(isupper(*iter))
問題在這裡 iter = s.erase(iter);
注意std::string 實際上裡面是個動態 char迭代器內部的內容實際是個char*
那麼當erase後 陣列長度發生變化
根據動態陣列的概念 是不是會發生
char* new_p = new char[new_length];
memcpy(new_p, old_p, new_length);
那麼原來的指標還能用嗎??
所以你這個功能應該使用 std::remove_if同樣的 vector也不能使用這樣的操作
但是類似操作 list就可以。
15樓:暖萱紫菱
erase()函式的功能是用來刪除容器中的元素。
函式原型:
iterator erase(iterator where);
iterator erase(iterator first,iterator last);
basic_string& erase(size_type p0=0,size_type n=np);
刪除某個容器裡的某個元素:c.erase(t);
連結串列容器以list為例,執行container.erase(it)。
list::iterator it;
for (it = lt.begin(); it != lt.end(); )
16樓:it孤鶩
試試這個
# include
# include
# include
using namespace std;
int main()
使用多執行緒應注意些什麼,java 多執行緒 需要注意什麼
deadlock 和 race condition c 使用多執行緒處理問題時,應注意什麼?cpu能最多建立的執行緒數,爭取用最少的執行緒達到你想要的效果,如果執行緒建立多了,會增加cpu的負擔,切換時間片浪費過多的時間,就達不到多執行緒的優點了 資源的訪問,也就是執行緒之間的同步和互斥 多執行緒的...
hashmap適用於多執行緒還是單執行緒環境嗎
多執行緒同時訪問資料時,需要互斥訪問。否則訪問的結果不可預期。hashmap為什麼不是執行緒安全的 此實現不是同步的。如果多個執行緒同時訪問一個雜湊映 射,而其中至少一個執行緒從結版構上修改了該映權射,則它必須 保持外部同步。結構上的修改是指新增或刪除一個或多個對映關係的任何操作 僅改變與例項已經包...
hashmap多執行緒為什麼造成死迴圈
一直以來只是知道hashmap是執行緒不安全的,但是到底hashmap為什麼執行緒不安全,多執行緒併發的時候在什麼情況下可能出現問題?hashmap底層是一個entry陣列,當發生hash衝突的時候,hashmap是採用連結串列的方式來解決的,在對應的陣列位置存放連結串列的頭 併發的hashmap為...