我们可以用 C# 和 C++ 等语言将数组的内容复制到另一个数组吗?
Posted
技术标签:
【中文标题】我们可以用 C# 和 C++ 等语言将数组的内容复制到另一个数组吗?【英文标题】:Can we copy the content of an array to another array in languages likes C# and C++ [closed] 【发布时间】:2021-08-14 06:20:00 【问题描述】:基本上,我有一个偶然发现的简单问题。
代码:
// Self implementation of
// the Vector Class in C++
#include <bits/stdc++.h>
using namespace std;
template <typename T> class vectorClass
// arr is the integer pointer
// which stores the address of our vector
T* arr;
// capacity is the total storage
// capacity of the vector
int capacity;
// current is the number of elements
// currently present in the vector
int current;
public:
// Default constructor to initialise
// an initial capacity of 1 element and
// allocating storage using dynamic allocation
vectorClass()
arr = new T[1];
capacity = 1;
current = 0;
// Function to add an element at the last
void push(T data)
// if the number of elements is equal to the
// capacity, that means we don't have space to
// accommodate more elements. We need to double the
// capacity
if (current == capacity)
T* temp = new T[2 * capacity];
// copying old array elements to new array
for (int i = 0; i < capacity; i++)
temp[i] = arr[i];
// deleting previous array
delete[] arr;
capacity *= 2;
arr = temp;
// Inserting data
arr[current] = data;
current++;
// function to add element at any index
void push(int data, int index)
// if index is equal to capacity then this
// function is same as push defined above
if (index == capacity)
push(data);
else
arr[index] = data;
// function to extract element at any index
T get(int index)
// if index is within the range
if (index < current)
return arr[index];
// function to delete last element
void pop() current--;
// function to get size of the vector
int size() return current;
// function to get capacity of the vector
int getcapacity() return capacity;
// function to print array elements
void print()
for (int i = 0; i < current; i++)
cout << arr[i] << " ";
cout << endl;
;
问题:
在上面的代码中,Push
方法有一个声明arr = temp;
那个声明是什么意思?
是他们试图将数组 temp 的内容复制到 arr 吗?
如果arr
是静态类型怎么办?像这样简单地将一个数组的内容复制到另一个数组吗?或者它可以与动态数组一起使用吗?
在诸如 C# 之类的编程语言中是否也能发挥同样的作用?
【问题讨论】:
1.这是一个指针重新分配。 2. ? 3. 我对 C# 了解不够,但你可能不会用那种语言编写容器。 “是不是他们试图将数组 temp 的内容复制到 arr 中?” -- 由于arr
不是数组,这些内容会去哪里? (不要考虑arr
是如何初始化的。单独考虑代码的那部分。你给T*
变量赋值,突然就必须有一个目标数组?)
【参考方案1】:
在C++中我们需要管理动态内存,这与C#不同
在上面的代码中,Push 方法有一条语句 arr = temp;那句话是什么意思?是他们试图将数组 temp 的内容复制到 arr 吗?
这只是将指针 temp 复制到 arr,这里没有发生数组复制。这是一种所有权转移,temp处理的动态内存已经转移到arr。
如果 arr 是静态类型怎么办?像这样简单地将一个数组的内容复制到另一个数组吗?或者它是否适用于动态数组?
static type
是什么意思? C++ 中的所有变量都是静态类型,所有数组都需要使用memcpy
或std::copy
显式复制。你也可以看看std::vector
container,在 C++ 中我们不经常使用动态数组,你的代码不是现代 C++ 风格,我们更喜欢使用管理器动态数组以外的容器(这让我们远离内存泄漏,某些类型的内存损坏)。我们可以使用=
来复制向量,使用起来更方便,也更安全。
在诸如 C# 之类的编程语言中也能同样工作吗?
对于 C#,您可以参考这个很棒的 answer。除了不需要管理内存,在某种程度上和C++类似。
【讨论】:
以上是关于我们可以用 C# 和 C++ 等语言将数组的内容复制到另一个数组吗?的主要内容,如果未能解决你的问题,请参考以下文章