當我需要頻繁地移動整塊的陣列元素時,我首先想到的兩個方法是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," "));
}
通過測試結果我們知道,在vector上,這個函式是對的,但在list中,這個函式不能呼叫。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中移動後的元素:");
但是此類呼叫對於list是可以的,
因為我現在還只是個學生,表達下我的觀點:list其實是乙個雙鏈表的資料結構,裡面牽扯到向前的指標和向後的指標,所以我們不能簡單的想運算元組那樣操作它,在本程式中,甚至呼叫都不能通過。(不能通過編譯的原因應該是我們不能在list中比較des和source!!!)for(list::iterator ii = l.begin();ii!=l.end();ii++)
cout<
當容器中存放的是類時,要定義拷貝建構函式!
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中的重...