c++复制数组的方法
时间: 2024-11-03 20:15:05 浏览: 39
在 C++ 中,复制数组有多种方法,取决于你想要创建的是深拷贝还是浅拷贝。以下是几种常见的情况:
1. **浅拷贝**(元素级别的复制):
- 对于基本数据类型(如整数、字符等),简单地赋值即可,例如:
```cpp
int arr1[5] = {1, 2, 3, 4, 5};
int arr2[5];
for (int i = 0; i < 5; i++) {
arr2[i] = arr1[i]; // 浅拷贝
}
```
2. **深拷贝**(结构体或类的完整副本):
- 如果数组包含自定义类型的结构体或对象,需要对每个元素都创建一个新的实例,例如:
```cpp
struct MyStruct {
int data;
};
MyStruct arr1[] = {...};
MyStruct arr2[5];
for (int i = 0; i < 5; i++) {
arr2[i] = arr1[i]; // 这里不是真正意义上的深拷贝,因为只是复制了地址
}
// 或者,通过深拷贝构造函数:
std::copy(arr1, arr1 + 5, arr2);
```
对于复杂的数据结构,可以使用 `std::vector` 的 `assign()` 函数来完成深拷贝。
3. **动态数组**(指针的情况下):
- 如果数组是通过指针引用的动态内存,通常也只需要复制指针:
```cpp
int *arr1 = new int[5];
// ...填充arr1...
int *arr2 = new int[5];
std::copy(arr1, arr1 + 5, arr2); // 深拷贝指针指向的内容
delete[] arr1;
delete[] arr2;
```
请注意,在处理动态分配的内存时,记得释放原始数组以避免内存泄漏。以上所有操作都要谨慎,特别是对于可能有副作用的复杂对象,确保正确的复制逻辑。
阅读全文
相关推荐


















