c++不長搞,每次搞都頻繁掉進陷阱裡。。。
std::setiset;
std::set::iterator it = iset.insert(4).first;
(*it)++; // error. 原因:std::set的迭代器不能修改對應的元素.
這是因為:
std::set的特點是:
1. 對於插入、刪除和查詢操作,
set保證其時間複雜度都是o(log n);
2. set是乙個有序的、可以前向和後向遍歷的容器(雙向迭代器);
3. set是乙個元素型別和比較函式可以配置的容器,但是一經配置,就不可更改;
4. set的元素可以插入、刪除,但是不可更改。
set在任何時刻都是乙個有序的結構,而一旦破壞這個有序性,set可能表現出非預期的行為。為了保證set的概念完整性,c++stl厲
行規定了3和4兩個限制,在絕大部分情況下,這兩個限制是合理的。
但是,當我在set裡面存的是shared_ptr元素時, 根本無所謂有沒有序. 我就是要通過迭代器獲取元素的非const引用. 解決如下:
#include
#include
template
inline t & getstdsetelement(std::_rb_tree_const_iteratorstd_set_iterator)
int main()
C 直接修改std set元素的方法
元素在std set中構造後,如果需要查詢,則呼叫find成員函式,但是該方式有乙個致命的缺陷,就是返回的是乙個常指標,無法通過指標更改元素的值。這樣做也是有意義的,因為如果是int之類的元素,本身相當於鍵值,更改鍵值就破壞了原來紅黑樹的結構了。但是,有些情況下,我們自定義了一些資料結構,但是需要更...
如何在觸發器中修改物件結構
create or replace trigger test trigger before insert on test tab for each row declare local variables here begin alter sequence test seq maxvalue 1000...
Windchill 修改物件的建立者 修改者
因為需要呼叫ootb 的 wt.vc包下的一些受保護的方法,toolhelper 類必須放在wt.vc包下 wtpart part null 需要設定的物件,可以是任何有大版本的物件iterated wtprincipalreference principal null 需要設定的參與者物件 too...