c++有3種陣列,vector,valarray,array
1.vector:是容器,優勢是支援面向容器的操作和演算法
2.valarray:是乙個類模板,面向數值計算,優勢是過載了各種數學函式,方便數學計算
3.array:其實是c陣列,固定長度,但是提供了stl演算法,比如begin(),end()等,優勢是特定的需要固定長度陣列的場景
valarray的數學優勢:例如,需要計算每個元素的對數,vector會這樣實現:
vectorv1(10);
vectorv2(10);
transform(v1.begin(), v1.end(), v2, log);
而使用valarray可以直接如下實現:
valarrayv1(10);
valarrayv2(10);
v2 = log(v1);
vector的優勢是提供了insert、push_back等方法,並且支援插入、排序、搜尋等操作,這些都是valarray不支援的,因為valarray不提供begin和end,valarray物件也不是指標,不能用如下方式:
valarrayv1(10);
sort(v1, v1 + 10); //invalid
唯一可用的是如下方式:
valarrayv(10);
sort(&v[0], &v[10]);
但是注意,valarray不是c陣列,對於c陣列,越界是訪問最後乙個元素後面的位址,但是valarray沒定義這種情況下的行為,可能造成乙個指向堆的記憶體的指標,sort一直執行,踩到堆上,因此不要這樣做。
slice類:其物件用作陣列索引,例如slice(0, 4, 3)表示第0,、3、6、9個元素,使用方法:
valarrayt(100;
t[slice(0, 4, 3)] = 1;
表示將0、3、6、9這4個元素的值設定為1。注意對t[slice(0, 4, 3)]沒有加法運算,使用的時候需要建立匿名物件,如下:
valarrayv(10);
v[slice[0, 4, 3)] = valarray(v[slice(1, 4, 2)]) + valarray(v[slice(5, 4, 1)]);
幾種陣列去重方法
使用es6中的set是最簡單的去重方法。var arr 1 1,true true true true,15 15,false false undefined,undefined,null null nan nan nan 0 0,a a function arr unique1 arr arr u...
js常用的幾種陣列方法
1.push 向乙個陣列末尾新增新元素,原陣列改變。var arr 1,2,3,4,5 arr.push 5,6,7 console.log arr 1,2,3,4,5,5,6,7 2.pop 刪除原陣列末尾的最後乙個值,原陣列改變。var arr 1,2,3,4,5 arr.pop console...
常見的幾種陣列排序的演算法
int arrs 思路 i i每次迴圈,都會確定陣列中最後一位元素是陣列中最小的元素。j 每次迴圈,陣列都會從下標為j的元素與下標為j 1的元素進行比較,如果小於,則調換兩者的位置,依次向下進行判斷,直到確定陣列最後一位元素為最小的元素。for int i 0 i arrs.length 1 i s...