所以我被告知要创建一个数组,该数组将接受来自用户的10个整数,将其存储到数组中,并使用指针气泡排序按升序对这些值进行排序。
我相信我已成功完成了这项工作,但我在第二部分遇到了麻烦。
“动态分配另一个10个整数的数组。将元素从第一个复制到第二个,但顺序相反(即降序)。按顺序显示第一个和第二个数组的元素,并释放动态分配的数组。”
我能够按顺序显示第一个数组,我知道要释放数组,你必须使用delete函数,但我不太清楚如何构造动态数组。
*我没有包含这些功能,因为我认为这部分不是必需的,但如果我这样做,那么我也会发布它们。
提前感谢任何建议和澄清。
#include <iostream>
using namespace std;
void sortArray(int * , int);
void showArray(const int * , int);
int binarySearch(const int *, int, int);
int main(void)
{
int const MAX_NUM = 10;
int numbers [MAX_NUM];
int counter;
int findval;
int index;
char again;
cout<< "Please enter 10 integer values."<< endl;
for(counter=0; counter< MAX_NUM ; counter++)
{
cout << "Enter a value for "<< counter+1 << ": ";
cin >> *(numbers+counter);
}
sortArray(numbers, 10);
cout << endl << "The values in ascending order are: " << endl;
showArray(numbers, 10);
do
{
cout<< endl << "Enter the value you are searching for: ";
cin >> findval;
cout << endl;
index = binarySearch(numbers , MAX_NUM , findval);
// Display the results of the search.
if (index == -1)
cout << "Number was not found." << endl << endl;
else
cout << "Number "<< findval<<" found in position " << index + 1 << endl << endl;
// Does the user want to do this again?
do
{
cout << "Would you like to look up another number? (y/n) ";
cin >> again;
}
while(again != 'y' && again != 'Y' && again != 'n' && again != 'N');
}
while (again == 'Y' || again == 'y');
cout<< endl << "Thank You. Press the return key to continue...";
cin.get();
cin.ignore();
return 0;
}
答案 0 :(得分:5)
动态内存管理应使用smart pointers或containers提供的C ++标准类和概念来完成。
正确使用C ++语言不需要对实际需要覆盖的大多数用例使用new
/ delete
。
答案 1 :(得分:0)
应使用运算符new
来分配内存。对于dealloaction,请使用delete
。
从分配内存开始:
int * dynArr = NULL; // pointer to work with dynamic array
dynArr = new int[MAX_NUM]; // allocation of memory
然后检查内存是否已分配,如:
if( dynArr != NULL )
{
// do something
}
else
{
// report about problem and do not use pointer
}
并使用复制元素的功能,例如:
void reversCopy(const int * source, int * destination, int number)
// Function for copying numbers from one array (memory) to other
// in the revers order (first element goes to the last position).
// source - pointer to array where numbers will be read
// destination - pointer to array where numbers will be written
// number - number of elements to be copyed
{
for(int i = 0; i < number; i++)
{
destination[i] = source[number - 1 - i];
}
}
最终,运营商提供免费的动态内存:
delete[] dynArr;
dynArr = NULL;
之后不要使用dynArr
。
答案 2 :(得分:0)
要动态分配数组,您需要构建如下代码:
int *arr = new int[size];
size varialbe不必是const,编译器也不需要在编译期间知道它的值。您可以要求用户提供大小:)不要颠倒您的原始表,而只是以相反的方式来确定元素:
for (int i = 0; i < size; ++i)
{
arr[i] = numbers[size - i - 1]; <-- '-1' to not read outside of orginal array (in C++ index starts with 0)
}
如果您想在不使用新表的情况下反转表,则应访问:Reverse Contents in Array。这样做的方法很少:)