基本原理:
删除思路:
找到要删除的元素的下标i,从i到N-1,后面一个元素赋值给前面的一个元素,即[i]=[i+1],操作完成后总长度-1进行输出
插入思路:
找到第一个比插入数字n大的数字的下标index,从size-1到index,前面一个元素赋值给后面一个元素,即[i+1]=[i],然后数字n插入到index位置,size++输出
模板类vector是一种动态数组,可以在运行阶段设置vector对象的长度,可以在末尾附加新数据,还可以在中间插入新数据。基本上,它是使用new创建动态数组的替代品。实际上,vector类使用new和delete来管理内存,这个工作是自动完成的。
首先,要使用vector,必须包含头文件vector;其次,vector包含在名称空间std中;第三,模板使用不同的语法来指出他存储的数据类型;第四,vector类使用不同的语法来指定元素数。
定义vector
#include <iostream> #include <vector> //引入vector头文件 using namespace std; int main() { //创建vector对象,<>表示范型 vector<double> vec; vec.push_back(1); for (int i = 0; i < vec.size(); i++) { cout << vec[i] << endl; cout << vec.at(i) << endl; //等价写法 } //创建一个包含10个元素的vector对象,默认元素值为0,通过第二个参数可以设置默认值 vector<int> vec1(10,1); cout << vec1.size() << endl; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
增删改查操作
#include <iostream> #include <vector> //引入vector头文件 #include <algorithm> using namespace std; int main() { int choice = -1; //用户的操作选择 vector<string> stu_name; //学生名单 string name; //学生名称 vector<string>::iterator iter; //迭代器对象 do { cout << "1.添加元素\n2.删除元素\n3.插入元素\n4.修改元素\n5.排序\n6.退出\n"; cout << "请输入你的选择:"; cin >> choice; switch (choice) { case 1: cout << "请输入新增学生名字:"; cin >> name; stu_name.push_back(name); break; case 2: cout << "输入需要删除的学生:"; cin >> name; //1.使用for循环查找需要删除的元素,找到后进行删除; //2.使用内置函数进行查找删除,引入<algorithm> iter = find( stu_name.begin(), stu_name.end(), name ); if (iter==stu_name.end()) //如果迭代器已经到了末尾,就表示没有找到元素 { cout << "没有找到要删除的元素!" << endl;; } else { stu_name.erase(iter); //删除第一个出现的元素 cout << "删除成功!" << endl; } break; case 3: break; case 4: break; case 5: break; default: cout << "程序已退出!" << endl; exit(0); } cout << "学生名单如下:" << endl; for (auto n:stu_name) { cout << n << endl; } } while (true); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
vector类的功能比数组强大,但付出的代价是效率较低。如果我们需要的是长度固定的数组,使用数组肯定是更加好的选择,但是代价是不太方便和安全。有鉴于此,C++11新增了模板类array,它也位于名称空间std中。与数组一样,array对象的长度也是固定的,也是用栈(静态内存分配),而不是自由存储区,因此效率与数组相同,但方便、安全。要创建array对象,需要包含头文件array。