嗨,我是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 ;
}
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;
}