C++ vector 的增删改查
时间: 2023-12-23 13:04:42 浏览: 321
C++ vector是一种动态数组,可以在运行时动态地增加或减少其大小。下面是关于C++ vector的增删改查的介绍:
1. 增加元素:
- push_back()函数:在vector的末尾添加一个元素。
- insert()函数:在指定位置插入一个或多个元素。
2. 删除元素:
- erase()函数:删除指定位置的一个或多个元素。
3. 修改元素:
- 直接通过下标访问元素,然后进行修改。
4. 查找元素:
- find()函数:在vector中查找指定元素,返回指向该元素的迭代器。
- 也可以通过下标访问元素,然后进行查找。
注意:在进行增删改查操作时,需要注意vector的迭代器失效问题。
相关问题
c++数组增删改查
### C++ 中数组的增删改查操作
#### 查询操作
查询操作可以通过遍历数组来实现。以下是通过循环查找特定值的一个例子:
```cpp
#include <iostream>
using namespace std;
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
bool found = false;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i) {
if (arr[i] == target) {
cout << "Element found at index: " << i << endl;
found = true;
break;
}
}
if (!found) {
cout << "Element not found." << endl;
}
return 0;
}
```
此代码展示了如何在一个固定大小的静态数组中查找目标值 `target` 的索引位置[^1]。
---
#### 修改操作
修改操作可以直接访问指定下标的元素并赋新值。以下是一个简单的示例:
```cpp
#include <iostream>
using namespace std;
int main() {
int arr[5] = {1, 2, 3, 4, 5};
// 将第3个元素改为99
arr[2] = 99;
// 打印整个数组验证修改效果
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i) {
cout << arr[i] << " ";
}
return 0;
}
```
上述代码将原数组 `[1, 2, 3, 4, 5]` 的第三个元素从 `3` 改为了 `99`,最终打印结果为 `[1, 2, 99, 4, 5]`。
---
#### 删除操作
由于 C++ 静态数组无法动态调整其大小,因此真正的删除操作通常涉及逻辑上的移动或覆盖。下面展示了一个模拟删除的操作:
```cpp
#include <iostream>
using namespace std;
void removeElement(int* arr, int& size, int pos) {
if (pos >= 0 && pos < size) {
for (int i = pos; i < size - 1; ++i) {
arr[i] = arr[i + 1];
}
--size;
}
}
int main() {
int arr[6] = {1, 2, 3, 4, 5, 6};
int size = 6;
// 移除索引为2的元素(即数值为3)
removeElement(arr, size, 2);
// 输出剩余部分
for (int i = 0; i < size; ++i) {
cout << arr[i] << " ";
}
return 0;
}
```
该程序实现了在不改变原始内存分配的情况下,“删除”某个元素的效果。实际上只是将其后的所有元素向前移动一位,并减少有效数据量计数器 `size` 的值[^2]。
---
#### 增加操作
同样因为 C++ 静态数组不可变长的特点,在实际应用中如果需要增加元素,则往往借助于标准库容器如 `std::vector` 来代替传统数组。下面是利用向量完成类似功能的例子:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
// 向末尾追加一个新元素78
vec.push_back(78);
// 插入到中间某处比如第二个位置之前加入数字88
vec.insert(vec.begin()+1 ,88);
// 显示更新后的列表内容
for(auto it=vec.begin();it!=vec.end();++it){
cout<< *it<<" ";
}
return 0;
}
```
这里使用了 STL 提供的功能强大的矢量类来进行灵活的数据管理,包括但不限于扩展存储容量以及随机定位插入等功能[^3]。
---
### 总结
对于传统的 C++ 静态数组而言,它不具备像 Python 列表那样的灵活性去执行诸如直接添加或者移除成员这样的动作;然而我们仍然可以采用一些技巧性的手段达成近似目的。当面对更复杂的需求场景时建议考虑运用现代 C++ 提供给我们的工具集——STL 容器家族中的成员们,它们能够极大地简化开发流程并且提高效率与安全性。
用c++实现增删改查
下面是一个简单的例子,演示了如何用C++实现增删改查:
```c++
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Student {
string name;
int age;
string gender;
};
vector<Student> students;
// 添加学生信息
void addStudent() {
Student stu;
cout << "请输入学生姓名:";
cin >> stu.name;
cout << "请输入学生年龄:";
cin >> stu.age;
cout << "请输入学生性别:";
cin >> stu.gender;
students.push_back(stu);
cout << "添加成功!" << endl;
}
// 删除学生信息
void deleteStudent() {
string name;
cout << "请输入要删除的学生姓名:";
cin >> name;
for (auto it = students.begin(); it != students.end(); it++) {
if (it->name == name) {
students.erase(it);
cout << "删除成功!" << endl;
return;
}
}
cout << "未找到该学生信息!" << endl;
}
// 修改学生信息
void modifyStudent() {
string name;
cout << "请输入要修改的学生姓名:";
cin >> name;
for (auto& stu : students) {
if (stu.name == name) {
cout << "请输入学生新姓名:";
cin >> stu.name;
cout << "请输入学生新年龄:";
cin >> stu.age;
cout << "请输入学生新性别:";
cin >> stu.gender;
cout << "修改成功!" << endl;
return;
}
}
cout << "未找到该学生信息!" << endl;
}
// 查询学生信息
void queryStudent() {
string name;
cout << "请输入要查询的学生姓名:";
cin >> name;
for (auto& stu : students) {
if (stu.name == name) {
cout << "姓名:" << stu.name << endl;
cout << "年龄:" << stu.age << endl;
cout << "性别:" << stu.gender << endl;
return;
}
}
cout << "未找到该学生信息!" << endl;
}
int main() {
while (true) {
cout << "请选择操作:1.添加 2.删除 3.修改 4.查询 5.退出" << endl;
int choice;
cin >> choice;
switch (choice) {
case 1:
addStudent();
break;
case 2:
deleteStudent();
break;
case 3:
modifyStudent();
break;
case 4:
queryStudent();
break;
case 5:
return 0;
default:
cout << "输入错误,请重新选择!" << endl;
}
}
return 0;
}
```
上面的代码使用了vector来存储学生信息,通过遍历vector来实现增删改查。其中,使用了结构体来表示学生信息。在添加、删除和修改时,通过遍历vector来查找要操作的学生信息;在查询时,同样遍历vector,根据输入的姓名来查找学生信息。
阅读全文
相关推荐













