C 對陣列進行複製

2021-10-11 18:53:30 字數 1529 閱讀 4842

int a = ;

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()的函式原型可以看到,該函式的前兩個引數的型別是void*型別,這樣做是為了使memcpy()可以作用於任何型別的指標。

但這樣做又導致了乙個問題,即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...