在python裡想去重,set()一下就好了。
c++裡其實也有類似的辦法。
結合這篇《c++ stl vector初始化》,基本能回溯python裡面任意使用list+set的自由度。
建構函式過載型別很多,我只推薦乙個。
(_iter &left , _iter &right),左閉右開。
這個_iter型別很寬泛,可以是......
①陣列位址
int a = ;②迭代器sets(a,a+5);
vectorv=;void insert(_iter)(_iter _first, _iter _last)sets(v.begin(),v.end());
如果是預先宣告好的set,可以採用insert。
使用方法基本同建構函式。
①陣列位址
sets;②迭代器int a = ;
s.insert(a,a+5);
注意,跟順序容器vector不同,set的insert不需要指定插入位置。
sets;當然了,直接使用initializer_list<>也是可以的。vectorv=;
s.insert(v.begin(),v.end()); //如果是vector的話,第乙個引數會是插入位置。
setsss = ;
std::copy(_init _first, _init _last, _outit _dest)copy又是乙個更泛用的stl函式,需要指定插入位置(最後乙個引數)。
#includesets;
vectorv=;
copy(v.begin(), v.end(), std::inserter(s,s.end()));
#define _crt_secure_no_warnings
#include #include #include #include settest(const set&a, const set&b) ;
總結一下,從需求出發
我有一串資料想去重。
①構造set
如果是從外部讀入的,先存到陣列a或者vector裡②set還原到vector然後使用建構函式(a,a+n),或者insert(a,a+n),
或者建構函式(v.begin(),v.end()),或者insert(v.begin(),v.end())
//copy函式是memset級別的,不用擔心效率問題③如果有多組資料,則分別用上述手法,初始化到集合a,b,c內。v.clear();
copy(s.begin(),s.end(),std::back_inserter(v));
然後對按需求abc求交並補。
快速初始化記憶體 2
因為我們使用靜態庫鏈結,intel版本在 中是乙個函式呼叫。跟蹤進入,可以發現intel的實現在第一次呼叫時會先檢測cpu型別,然後根據cpu型別跳轉到不同的實現。在p4 機器上,其主迴圈如下 00401a40subecx,80h 00401a46movdqaxmmword ptr edx xmm0...
初始化 指定初始化
id alloc 物件的誕生過程,主要是從作業系統獲得一塊足夠大的記憶體,以存放該類的全部例項變數,並將其指定為存放記憶體物件的實力變數的位置。alloc方法同時將這塊記憶體全部設定為0。結果是 bool變數初始化為no,所有的int型別變數為0,float變數為0.0,所有的指標為nil.obje...
初始化 1 預設初始化 列表初始化
初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...