copy
- 代入
配列1= 配列2
- std::copy
- move
の三つがあります。
vector<int>
型などで、新しい配列を用意して、元の配列の値を変更したくない時には配列1= 配列2
を使用するのが良さそうです。
代入動作は、コピー元の配列と同じストレージを持つ配列を用意し、そこに基本型を割り当てていく動作のようです。
vector<int> a = {1, 2, 3};
vector<int> b(3) = a;
実際の内部動作
b[0] = a[0] ;
b[1] = a[1] ;
b[2] = a[2] ;
この動作のため、コピー先配列b
の要素を変更してもコピー元配列a
には反映されません。
b[0] = 999;
cout << "a[0]:" << a[0] << endl;
cout << "b[0]:" << b[0] << endl;
output
a[0]:1
b[0]:999
※参考 https://ezoeryou.github.io/cpp-intro/#vector%E3%81%AE%E3%82%B3%E3%83%94%E3%83%BC
作成中
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> a = {1, 2, 3};
cout << &a[0] << endl;
vector<int> b = a;
cout << &b[0] << endl;
// shallow copy
vector<int> c(a.size());
copy(a.begin(), a.end(), c.begin());
cout << &c[0] << endl;
}
copy()
関数によるコピーと=
演算子によるコピー。
output
0x14a606bc0
0x14a606bd0
0x14a606be0
参考