这是我反转动态数组的首次尝试:

bool reverse()
{
    T *newArray = NULL;

    // Validate operation.
    if (!isValid() || isReadOnly())
        return false;

    // Allocate new array
    newArray = new (std::nothrow)T[m_size];
    if (newArray == NULL)
        return false;

    // Reverse the array's contents.
    for (int i = m_size - 1; i >= 0; i--)
        newArray[i] = m_array[i];

    // Delete old array.
    delete[] m_array;
    m_array = NULL;

    // Assign new array
    m_array = newArray;

    return true;
}


您可以想象,这对于大型阵列而言非常昂贵:


分配和取消分配需要时间。
具有“ for”的线性算法也需要时间。


我知道std :: reverse,但不幸的是它不适用于动态数组。

我应该使用std :: vector吗?是。但这是为了学习。我正在阅读一本数据结构游戏编程书,并扩展了我的学习范围。

因此,我有兴趣将Array的该成员函数简化为算法本身:

    // Reverse the array's contents.
    for (int i = m_size - 1; i >= 0; i--)
        newArray[i] = m_array[i];


我觉得有一个简单的方法可以降低成本。我在Google上看过,但是我只是在寻找静态数组的解决方案。

先谢谢了。

额外:

我正在尝试再次std :: reverse,但到目前为止还没有运气。

std::reverse(std::begin(m_array), std::end(m_array));


编译错误:


  错误C2672:“开始”:找不到匹配的重载函数


另外,由于没有指定大小,std :: end不会知道动态数组的结尾,所以也许我只是使用错误的函数来实现此目标。最好以某种方式使用std :: reverse。

最佳答案

std::reverse(m_array+0, m_array+m_size);


std::reverse将迭代器作为参数,而指针是迭代器的一种形式。

关于c++ - 如何在C++中反转动态数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49374550/

10-11 16:13