C++ 有序向量操作:插入、删除、查找
以下是使用 C++ 编写的程序,实现了对有序向量的插入、删除和查找操作:
#include <iostream>
#include <vector>
using namespace std;
// 打印有序向量
void printVector(const vector<int>& vec) {
for (int num : vec) {
cout << num << " ";
}
cout << endl;
}
// 在有序向量中插入数值
void insertElement(vector<int>& vec, int num) {
// 判断向量空间是否不够,进行自动扩容
if (vec.size() == vec.capacity()) {
vec.reserve(vec.capacity() * 2);
}
// 寻找插入位置
int i = 0;
while (i < vec.size() && vec[i] < num) {
i++;
}
// 插入元素
vec.insert(vec.begin() + i, num);
// 输出插入后的有序向量
printVector(vec);
}
// 从有序向量中删除指定数值
void deleteElement(vector<int>& vec, int num) {
int count = 0; // 记录删除的元素数量
// 循环删除等于num的元素
for (auto it = vec.begin(); it != vec.end();) {
if (*it == num) {
it = vec.erase(it);
count++;
} else {
++it;
}
}
// 输出删除后的有序向量
if (count > 0) {
printVector(vec);
} else {
cout << "无此元素" << endl;
}
}
// 在有序向量中查找指定数值
void searchElement(const vector<int>& vec, int num) {
int count = 0; // 记录等于num的元素数量
int minRank = -1; // 最小秩
// 循环查找
for (int i = 0; i < vec.size(); i++) {
if (vec[i] == num) {
if (minRank == -1) {
minRank = i;
}
count++;
} else if (vec[i] > num) {
break; // 因为是有序向量,所以后面的元素不可能等于num
}
}
// 输出查找结果
if (count > 0) {
cout << "最小秩: " << minRank << ", 数量: " << count << endl;
} else {
cout << "无此元素" << endl;
}
}
int main() {
vector<int> vec;
cout << "插入操作:" << endl;
for (int i = 0; i < 10; i++) {
int num;
cout << "请输入第 " << i+1 << " 个数:";
cin >> num;
insertElement(vec, num);
}
cout << "删除操作:" << endl;
while (true) {
int num;
cout << "请输入要删除的数(输入0结束):";
cin >> num;
if (num == 0) {
break;
}
deleteElement(vec, num);
}
cout << "查找操作:" << endl;
while (true) {
int num;
cout << "请输入要查找的数(输入0结束):";
cin >> num;
if (num == 0) {
break;
}
searchElement(vec, num);
}
return 0;
}
这段程序实现了建立有序向量、插入操作、删除操作和查找操作。程序会根据用户的输入进行相应的操作,并输出每一次操作后的有序向量或结果。请注意,该程序假设用户输入的都是整数。
原文地址: https://www.cveoy.top/t/topic/OmG 著作权归作者所有。请勿转载和采集!