[使用动态分配运算符的c ++反向数组元素

问题描述 投票:0回答:2

嗨,我是C ++的初学者。这次,我尝试使用动态分配运算符反转Array的元素顺序。例如,将通过调用函数“ reverseArray”将数组{1,2,3,4}重新排列为{4,3,2,1}。一切正常,但不知何故我得到了不需要的整数“ -1”以及重新排列的数组。例如{-1,4,3,2,1}。这意味着我做错了,我真的想了解我的错。这是我的代码,请帮我弄清楚。

#include<iostream>
#include<new>

using namespace std;

void reverseArray(int [] , int);

int main(){

    int num=0;

    cout << "enter size of pointer : " ;
    cin >> num ;

    int *pointerArray = new int [num];

    cout << "enter integer numbers in pointer" << endl;

    for(int index = 0 ; index < num ; index++){
        cin >> pointerArray[index];     
    }

    reverseArray(pointerArray, num);

delete[] pointerArray;
    return 0 ; 
}

void reverseArray(int reverse[], int Size){
    int*ptArray[Size]; 

    cout << "the reverse order of entered numbers is : " << endl;
    for(int index = 0 ; Size >= 0 ; index++) {
        ptArray[index] = &reverse[Size];
        cout << *ptArray[index] << " " ;
        --Size; 
    }

    return ; 
}
c++ arrays dynamic-memory-allocation
2个回答
0
投票
尚不清楚为什么创建一个指针数组,并且int*ptArray[Size];是可变长度数组(VLA),它不是标准的C ++。此外,您不需要包括<new>

要打印动态尺寸的(即从输入中获取尺寸)数组,您将使用std::vector和循环:

#include <vector> #include <iostream> int main(){ size_t size; std::cout << "enter size: "; std::cin >> size; std::vector<int> data(size); for (auto& element : data) std::cin >> element; for (size_t i = 0; i < data.size(); ++i) { std::cout << data[ data.size()-1-i ]; // first element printed is data[data.size()-1] } }

[如果要反转阵列,而不仅仅是反转顺序,则std::reverse中有<algorithm>。该算法还适用于动态分配的数组:

#include <iostream>
#include <algorithm>

int main(){   
    size_t size;
    std::cout << "enter size: ";
    std::cin >> size;

    int* data = new int[size];
    for (size_t i=0; i<size; ++i) std::cin >> data[i];

    std::reverse(data,data+size);
    for (size_t i=0; i<size; ++i) std::cout << data[i];

    delete [] data;
}
© www.soinside.com 2019 - 2024. All rights reserved.