陣列元素或者vector頻繁整體移位 函式模板

2021-05-27 22:35:30 字數 1769 閱讀 5313

當我需要頻繁地移動整塊的陣列元素時,我首先想到的兩個方法是memmove和stl中的copy演算法,但是memmove只適用於字串,而copy演算法則des和source不能重疊。

所以我仿照memmove寫了乙個。

#include #include #include using namespace std;

/*int* memmove1(int* dest, int* source, size_t count)

else

return ret;

}*/templatet datamove(t dest, t source, size_t count)

else

return ret;

}void main()

; double double_array = ;

datamove(array+1,array,8);

datamove(double_array+1,double_array,5);

copy(array,array+9,ostream_iterator(cout," "));

cout<< endl;

copy(double_array,double_array+6,ostream_iterator(cout," "));

}

上面我們測試了在陣列上這個函式的執行,現在我們再測試下,在容器上這個元素的執行。

templatevoid print(t t, const char* s)

//將v中元素逆序插入到l中

copy(v.begin(),v.end(),front_inserter(l));

//顯示

print(v,"vector中原有的元素:");

print(l,"list中原有的元素:");

//移動元素

vector::iterator it=v.begin();

datamove(it+1,it,9);

list::iterator it1 = l.begin();

//datamove(it1,it1,9);

//顯示

print(v,"vector中移動後的元素:");

//print(l,"list中移動後的元素:");

通過測試結果我們知道,在vector上,這個函式是對的,但在list中,這個函式不能呼叫。

但是此類呼叫對於list是可以的,

for(list::iterator ii = l.begin();ii!=l.end();ii++)

cout<

因為我現在還只是個學生,表達下我的觀點:list其實是乙個雙鏈表的資料結構,裡面牽扯到向前的指標和向後的指標,所以我們不能簡單的想運算元組那樣操作它,在本程式中,甚至呼叫都不能通過。(不能通過編譯的原因應該是我們不能在list中比較des和source!!!)

當容器中存放的是類時,要定義拷貝建構函式!

class a

a(const a &a)

//operator =(a &a)

int getx()

int gety()

void visit()

vector::iterator it=v.begin();

for(;it!=v.end();it++)

it->visit();

cout

cout<

numpy 建立vector或者matrix

函式 含義np.array 建立乙個numpy.ndarray型別的陣列 np.zeros shape 返回乙個指定shape的,元素全為0的numpy.ndarray型別的陣列 np.arange start,stop,step 返回乙個 以step為步長,從start開始,到end前結束 左閉右...

Vector容器刪除元素

使用vector容器也有一段時間了,但是對於他的刪除操作還是有點疑問,今天就總結一下。vector資料儲存是一段預先分配好大小的記憶體連續的空間,插入資料和刪除資料都會引起後面資料記憶體的整體移動。今天就說說刪除操作吧 1 刪除最後的元素 直接使用pop back 就可以了,這個沒什麼好說的 2 刪...

vector 之刪除元素

刪除指定位置的元素 刪除vector中第5個位置的元素 1 vector vec 執行vector初始化操作 2 vector iterator iter vec.begin 5 獲取第五個元素的iterator 3 vec.erase iter 刪除第五個元素 刪除重複元素 刪除vector中的重...