如何从数组中移除一个元素,然后将其他元素移到上面
How to remove an element from an array and then shift other elements over?
我的问题是最后一个函数print_valid_data。我应该从数组A[]
中删除第二个最小值。删除该值后,数组中的元素需要转移,数组中最后一个空位为空。我在函数中所做的就是跳过它,打印出剩下的内容。我该如何通过删除然后转移来完成它?
附带说明:Var.h是一个只有数据"const int NUM=10"才能更改的文件,它用于数组的索引。"data.txt"文件中有一些整数(程序占>10个数字或<10个数字),这些整数是用Load_file_to_array
函数读取的。
#include <iostream>
#include "Var.h"
#include <fstream>
#include <string>
using namespace std;
void Load_File_To_Array(int A[], string filename, int size);
int Get_2nd_Smallest(int A[], int size);
void Print_valid_data(int A[], int SecondMin, int size);
int main()
{
int A[NUM];
int size = NUM;
int SecondMin = 0;
string filename = "Data.txt";
Load_File_To_Array(A, filename, size);
Get_2nd_Smallest(A, size);
Print_valid_data(A, SecondMin, size);
cout << endl;
system("Pause");
return 0;
}
void Load_File_To_Array(int A[], string filename, int size)
{
ifstream infile;
infile.open(filename);
cout << "The array is: ";
for (int i = 0; i < NUM; i++)
{
if (infile.eof())
break;
infile >> A[i];
cout << A[i] << ", ";
}
return;
}
int Get_2nd_Smallest(int A[], int size)
{
int Min = A[0];
int SecondMin = 0;
for (int i = 0; i < NUM; i++)
{
if (Min > A[i])
Min = A[i];
}
//Exchange-sort to sort the array in descending order
int j, k;
int counter;
for (j = 0; j < (size - 1); j++)
{
for (k = (j + 1); k < size; k++)
{
if (A[j] < A[k])
{
counter = A[j];
A[j] = A[k];
A[k] = counter;
}
}
}
for (int n = (NUM - 1); n > -1; n--)
{
SecondMin = A[n];
if (SecondMin >= 0)
{
SecondMin = A[n - 1];
break;
}
else;
}
cout << endl << "The minimum number is: " << Min << endl;
cout << "The second smallest integer is: " << SecondMin << endl;
return SecondMin;
}
void Print_valid_data(int A[], int SecondMin, int size)
{
cout << "The new array is: ";
for (int i = 0; i < size; i++)
{
if (A[i] != SecondMin)
{
cout << A[i] << ", ";
}
}
return;
}
以下可能会有所帮助,删除是通过复制上一个值来完成的:
const int size = 6;
int v[] = {5, 6, 8, 2, 3, 1};
std::partial_sort(std::begin(v), std::begin(v) + 2, std::end(v));
std::cout << "The minimum number is: " << v[0] << std::endl;
std::cout << "The second smallest integer is: " << v[1] << std::endl;
std::copy(std::begin(v) + 2, std::end(v), std::begin(v) + 1);
std::cout << "remaining values: ";
for (int i = 0; i != size - 1; ++i) {
std::cout << v[i] << ", ";
}
实例
相关文章:
- lower_bound()返回最后一个元素
- 使用std::transform将一个范围的元素添加到另一个范围中
- 我想访问std::unique_ptr中的一个特定元素
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 删除映射和分割错误中的一个过去结束元素
- Lower_bound不适用于具有 3 个元素的向量的最后一个元素
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 检查 2D 网格的某个元素是否与另一个元素共享对角线、水平线或垂直线
- 如何创建一个所有行大小不同的 2D 数组,并且用户将指定每行将有多少个元素?
- 仅显示链表的最后一个元素
- 为什么在 std::map 上移动无法将元素从一个映射移动到另一个映射
- 查找最小的下一个更大的元素
- push_back通过自行创建的对象获取最后一个元素的向量
- 使用 map.end() 访问 map 的最后一个元素
- 如何知道地图中的最后一个元素是否被删除?
- 选择一个元素而不是一个对象的数组的原因
- std::矢量保存 只推送最后一个元素
- 为什么这个选择排序算法仍然切换一个元素,当它已经是其他元素中最小的元素时?
- 动态分配列表 - 创建一个函数,用于删除所有包含偶数值的元素