我们可以用 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++ 中的所有变量都是静态类型,所有数组都需要使用memcpystd::copy 显式复制。你也可以看看std::vectorcontainer,在 C++ 中我们不经常使用动态数组,你的代码不是现代 C++ 风格,我们更喜欢使用管理器动态数组以外的容器(这让我们远离内存泄漏,某些类型的内存损坏)。我们可以使用=来复制向量,使用起来更方便,也更安全。

    在诸如 C# 之类的编程语言中也能同样工作吗?

对于 C#,您可以参考这个很棒的 answer。除了不需要管理内存,在某种程度上和C++类似。

【讨论】:

以上是关于我们可以用 C# 和 C++ 等语言将数组的内容复制到另一个数组吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在托管 (C#) 和非托管 (C++) 代码之间来回传递数组内容

c语言数组构造类型的特点

什么是c加加啊

将二维双数组从 C# 传递到 C++ 函数

C#如何调用C++的DLL的结构体数组指针

可以用 C++ 原始指针实现 GC 吗?