執行結果:int a = ;
由memcpy()的函式原型可以看到,該函式的前兩個引數的型別是void*型別,這樣做是為了使memcpy()可以作用於任何型別的指標。int b[5];
std::copy(std::begin(a),std::end(a),std::begin(b));
for(auto e:b) cout上述程式中,copy演算法將陣列a區間中的數複製到以begin(b)開始的區間中去.
std::arrayarr = ;
std::arraycopy;
copy = arr; // 將arr中的元素複製到copy中
arr[0] = 100;
for(auto e:copy) cout注意:memcpy()函式的第三個引數表示的是要複製的位元組數,而不是要複製的元素數目。至於這樣做的原因,可以先來看memcpy()的原型:
void* memcpy(void* destination,const void* source,size_t num);
但這樣做又導致了乙個問題,即memcpy()不知道傳入陣列的每個元素用多少位元組來表示。也正是因為這個原因,使得memcpy()的第三個引數不能是要複製的元素個數,而是要複製的位元組數。
該函式與memcpy()類似,只是memmove允許目的位置和源位置重疊,示例如下:
int arr = ;
memmove(arr+3,arr+1,sizeof(int)*5);
for(auto e:arr) cout注意:上面的程式中,如果將memmove()換作memcpy()可能也會正常工作,但是這種行為是不可預計的,當目的位置與源位置存在重疊時,應當使用memmove()。
#include using namespace std;
int main()
; int b[10] = ;
int c[10] = ;
//copy
copy(begin(a), end(a), begin(b));
for (auto i : b)
cout << i << " ";
cout << endl;
//memcpy
memcpy(c, a, sizeof(a));
for (auto i : c)
cout << i << " ";
cout << endl;
//memmove
int arr = ;
memmove(arr + 3, arr + 1, sizeof(int)* 5);
for (auto e : arr)
cout << e << " ";
cout << endl;
system("pause");
return 0;
}
對陣列進行總結
一維陣列 1 陣列 arr n 其中n為常量。注 陣列未初始化為隨機值。2 char 型別的陣列 例 char arr1 char arr2 a b c printf s n arr1 printf d n strlen arr1 注 s 遇到 0 才可以結束 字串求長度 0 為標誌,但不算做乙個字...
對陣列進行排序
函式名稱 排序依據 陣列索引鍵保持 排序的順序 相關函式 array multisort 值鍵值關聯的保持,數字型別的不保持 第乙個陣列或者由選項指定 array walk asort 值是 由低到高 arsort arsort 值是 由高到低 asort krsort 鍵是 由高到低 ksort ...
C 使用模板對陣列進行封裝
模板標頭檔案 hpp pragma once include include using namespace std template class t class myarray myarray const myarray art myarray myarray operator myarray p...