c++ - c++ 使用动态分配运算符反转数组元素
问题描述
嗨,我是 C++ 的初学者。这一次,我尝试使用动态分配运算符来反转 Array 的元素顺序。例如数组{1,2,3,4}将通过调用函数'reverseArray'重新排列{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 ;
}
解决方案
在您的代码中,您在第一次迭代时访问数组越界,因为对于大小Size
有效索引的数组0
最多Size-1
目前尚不清楚为什么要创建一个指针数组,它int*ptArray[Size];
是一个非标准 C++ 的可变长度数组 (VLA)。此外,您不需要包含<new>
.
要打印动态大小(即大小取自输入)数组,您将使用 astd::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;
}
推荐阅读
- c# - Microsoft DependencyInjection 到 Ninject DI
- angular - 安装材料颜色选择器后,ng build 无法正常工作
- mysql - 从 mysql 选择查询中删除行
- android - 在 android 模拟器上以 xamarin 形式下载文件
- php - Laravel 导出到 Excel
- apache - Apache2 服务器和转发路由器上的两个端口
- scala - scala.jdk.CollectionConverters 的性能损失
- javascript - React w/ Redux/React-Redux 和 Redux-Persist 仅将第一次更改持久化到本地存储
- python - django 操作错误
- android - Renderscript 致命信号 11 (SIGSEGV) 代码 1 (SEGV_MAPERR) 故障地址