- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
#include <iostream>
using namespace std;
void getMaximumPositive(int* arr, int size, int* max)
{
max = nullptr; //Set default value of max pointer
for (int i = 0; i < size; i++)
{
if (arr[i] > 0) //Only positive numbers are considered while locating the maximum
{
if (max == nullptr)
max = &arr[i];
else if (arr[i] > * max)
max = &arr[i];
}
}
}
void getMaximumNegative(int* arr, int size, int* max)
{
max = nullptr; //Set default value of max pointer
for (int i = 0; i < size; i++)
{
if (arr[i] < 0) //Only negative numbers are considered while locating the maximum
{
if (max == nullptr)
max = &arr[i];
else if (arr[i] > * max)
max = &arr[i];
}
}
}
void printArrayForwards(int* arr, int size)
{
cout << "Array contents (Forwards): " << endl;
for (int i = 0; i < size; i++)
cout << arr[i] << " : ";
cout << endl;
}
void printArrayBackwards(int* arr, int size)
{
cout << "Array contents (Backwards): " << endl;
for (int i = 0; i < size; i++)
cout << *(arr - i - 1) << " : ";
cout << endl;
}
void swapMaxtoFront(int* arr, int* max_address)
{
if (max_address == nullptr)
return; //Do nothing if max_address is null
//Print the addresses and their corresponding values of the first element and the maximum element of the array
cout << endl << "Swapping elements:" << endl;
cout << "Address 1: " << arr << " Value: " << *arr << endl;
cout << "Address 2: " << max_address << " Value: " << *max_address << endl << endl;
//Code for the swap
int temp = *arr;
*arr = *max_address;
*max_address = temp;
max_address = arr;
}
void PrintArray(int* arr, int size)
{
printArrayForwards(arr, size);
printArrayBackwards(arr, size);
}
int main()
{
//Initialize pointers to null
int* array = nullptr; //Do Not Change This Variable Definition
int* max = nullptr; //Do Not Change This Variable Definition
int arr_size;
cout << "Enter the size of your array: ";
cin >> arr_size;
array = new int[arr_size]; //Reserve memory for array of size given by user
cout << "Enter array elements: " << endl;
for (int i = 0; i < arr_size; i++)
{
cout << "Element " << i + 1 << " of " << arr_size << " : ";
cin >> *(array++);
}
PrintArray(array, arr_size);
cout << endl << endl;
cout << "-----------------------------------------------" << endl << "Finding maximum positive number in array..." << endl;
getMaximumPositive(array, arr_size, max); //Max should point to the Maximum positive value in the array
swapMaxtoFront(array, max); //Swap the maximum positive number with the first element of the array
PrintArray(array, arr_size); //Print array with swapped values.
//Print maximum positive number
cout << endl;
if (max == nullptr)
cout << "*******No positive numbers found in array" << endl;
else
cout << "*******Maximum positive number in array: " << *max << endl; //Max should point to the Maximum positive value in the array, which should now be the first element
cout << "-----------------------------------------------" << endl;
cout << endl;
cout << "-----------------------------------------------" << endl << "Finding maximum negative number in array..." << endl;
getMaximumNegative(array, arr_size, max); //Max should point to the Maximum negative value in the array
swapMaxtoFront(array, max); //Swap the maximum negative number with the first element of the array
PrintArray(array, arr_size); //Print array with swapped values.
//Print maximum negative number
cout << endl;
if (max == nullptr)
cout << "*******No negative numbers found in array" << endl;
else
cout << "*******Maximum negative number in array: " << *max << endl; //Max should point to the Maximum negative value in the array, which should now be the first element
cout << "-----------------------------------------------" << endl;
delete[] array;
delete max;
array = nullptr;
max = nullptr;
return 0;
}
输出(我正在寻找的):
输入数组的大小:4
输入数组元素:
元素 1,共 4 个:2
元素 2,共 4 个:8
元素 3,共 4 个:4
元素 4,共 4:6
数组内容(转发):
2:8:4:6:
数组内容(向后):
6:4:8:2
查找数组中的最大正数...
交换元素:
地址 1:015E10A0 值:2
地址 2:015E10A4 值:8
数组内容(向前)
8:2:4:6:
数组内容(向后)
6:4:2:8:
*********数组中的最大正数:8
查找数组中的最大负数...
数组内容(转发):
8:2:4:6:
数组内容(向后):
6:4:2:8:
*******数组中没有找到负数
最佳答案
我注意到的最大问题是你对 array
做了什么:
array = new int[arr_size];
//...
for(size_t i = 0; i < arr_size; i++) {
cin >> *(array++); // here you step array
}
// ... and you use the final pointer "array" everywhere, undefined behaviour. It
// points one element outside of the area you allocated
delete[] array; // the final nail in the coffin,
修复:
for(int i = 0; i < arr_size; i++) {
cout << "Element " << i + 1 << " of " << arr_size << " : ";
cin >> array[i];
}
解决了这个问题,这就成了一个问题:
void printArrayBackwards(int* arr, int size) {
cout << "Array contents (Backwards): " << endl;
// arr points at the start, so arr - 0 - 1 points before start here:
for(int i = 0; i < size; i++) cout << *(arr - i - 1) << " : ";
cout << endl;
}
修复:
void printArrayBackwards(int* arr, int size) {
cout << "Array contents (Backwards): " << endl;
for(int i = size - 1; i >= 0; --i) cout << arr[i] << " : ";
cout << endl;
}
另一件事是 getMaximumPositive
和 getMaximumNegative
函数。您不会返回指向 max
中最大值的指针。我将其更改为对 int*
的引用:
void getMaximumPositive(int* arr, int size, int*& max) {
max = nullptr; // Set default value of max pointer
for(int i = 0; i < size; i++) {
if(arr[i] > 0)
{ // Only positive numbers are considered while locating the maximum
if(max == nullptr)
max = &arr[i];
else if(arr[i] > *max)
max = &arr[i];
}
}
}
void getMaximumNegative(int* arr, int size, int*& max) {
max = nullptr; // Set default value of max pointer
for(int i = 0; i < size; i++) {
if(arr[i] < 0)
{ // Only negative numbers are considered while locating the maximum
if(max == nullptr)
max = &arr[i];
else if(arr[i] > *max)
max = &arr[i];
}
}
}
我还删除了你的 delete max
。它是指向 array
中的 int
的指针,您可以使用 delete[] array
删除它。你不应该删除它。
另一个不通过参数返回值的函数在 swapMaxtoFront
中。我将其更改为:
void swapMaxtoFront(int* arr, int*& max_address) {
//...
Full code用
模拟你的输入std::istringstream cin{"4 2 8 4 6"};
关于c++ - 试图弄清楚我需要做哪些更改才能使此代码正常工作。使用 Visual Studio ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58939001/
我一直在试图理解人们一直在使用的这个网格系统。有时让我觉得自己很蠢。 我了解如果您使用无边距的 12 网格系统。第 12 列将是 100%,而第 1 列将约为 8.33333%。 我一直在看一些网格系
我们被分配了一个用于系统编程的 ASCII 压缩项目,但我在代码中的某一特定行上遇到了困难。 我问了question关于压缩,在处理完纸上示例文件的前十几个字母后,我将数组代码调整到了我的程序中。在
我正在使用 Appcelerator 框架编写应用程序,但偶尔会发生崩溃。我正在尝试找出导致崩溃的原因,因此我决定查看 iOS 模拟器崩溃报告。当然,这对我来说都是希腊语,但我希望得到一些指导,了解其
有人可以给我一些指导或指导我阅读有关 C++ set 对象的优秀教程吗? 我有一段这样的简单代码: #include using namespace std; int main() { ch
老实说,我不知道我的问题是否有解决方案,但我想在 Swift 中捕捉上下文切换发生的时间。 我正在想象一个需要很长时间才能完成的功能,例如远程服务器上的写操作,我在想是否有办法了解何时(至少在哪一行)
我正在使用 Yii2 并且一直在阅读 theming和 theme inheritance ;但是有一些问题: 考虑以下示例: 'view' => [ 'theme' => [
我尝试使用 AJAX 发布,因为我不想使用提交按钮并在每次单击它时重新加载页面。我正在使用此代码进行 ajax: Ajax loading error, please try again.").sho
我正在尝试找出将在 NodeJS 应用程序中使用的 MongoDB 模型的理想设计。该应用程序的设置类似于调查,某些步骤会根据之前的选择提供选项。这是选择和可能性的示例。 第 1 级:图案类型:纯色、
我有一个 API/Express 路由器: router.post("/signup", async function (req, res) { try { var user
我注意到 JFileChooser 隐藏了 Windows 系统文件。 hiberfil.sys、pagefile.sys、$Recycle.Bin 等文件、一些无法打开的快捷方式文件夹等... 我可
这是我第一次使用 Django,到目前为止,我对这个框架的工作方式印象深刻。我目前正在开发我的第一个应用程序,并正在处理数据库内容,但是,我在弄清楚如何在不运行原始查询的情况下进行内部联接时遇到问题。
我在自动调整蒙版大小方面遇到了一些问题。这是交易:我正在使用最近发布的 TwUI ,它从 UIKit 中获取了很多,但它在 Mac 上。这就是我为 iOS 和 Mac 标记的原因。因此,我创建了一个底
好吧,这是一个很长的,打起精神来! :) 最近我尝试在启动期间启动一个用 bash 编写的看门狗脚本。所以我在 rc.local 中添加了一行,其中包含以下内容: su someuser -c "/h
我在我的机器上安装了多个版本的 Windows 软件开发工具包,有趣的是,我的机器上已经安装了一个 Visual studio Installer工具的版本低于近一年前安装的版本: Windows S
widget('zii.widgets.CMenu', array( 'items'=>array( array('label'=>'Home', '
我是一名优秀的程序员,十分优秀!