C++数据结构之Vector向量容器
1.1 vector 说明
-
vector是向量类型,可以容纳许多类型的数据,因此也被称为容器
-
(可以理解为动态数组,是封装好了的类)
-
进行
vector操作前应添加头文件#include <vector>
1.2 vector初始化
1 方式一 2 //定义具有10个整型元素的向量(尖括号为元素类型名,它可以是任何合法的数据类型),不具有初值,其值不确定 3 vector<int>a(10); 4 5 方式二 6 //定义具有10个整型元素的向量,且给出的每个元素初值为1 7 vector<int>a(10,1); 8 9 方式三 10 //用向量b给向量a赋值,a的值完全等价于b的值 11 vector<int>a(b); 12 13 方式四 14 //将向量b中从0-2(共三个)的元素赋值给a,a的类型为int型 15 vector<int>vec1{ 1,2,3,4,5,6,7 }; 16 vector<int>vec(vec1.begin(), vec1.begin() + 3); 17 18 方式五 19 //从数组中获得初值 20 int b[7]={1,2,3,4,5,6,7}; 21 vector<int> a(b,b+7);
vector常用的函数

1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 template <typename T> 5 ostream& operator<<(ostream& os, const vector<T>vec) 6 { 7 for (auto e : vec) 8 { 9 os << e << ' '; 10 } 11 os << endl; 12 return os; 13 } 14 15 //循环输入插入值 16 void text1() 17 { 18 vector<int> vec; 19 for (int i = 0; i < 10; i++) 20 { 21 int num; 22 cin >> num; 23 vec.push_back(num); 24 } 25 cout << vec; 26 } 27 28 //初始化值 29 vector<int> text2() 30 { 31 vector<int>vec(10, 2); 32 return vec; 33 } 34 35 //用向量b给向量a赋值 36 void text3() 37 { 38 vector<int>vec(text2()); 39 cout << vec; 40 } 41 42 //切块赋值 43 void text4() 44 { 45 vector<int>vec1{ 1,2,3,4,5,6,7 }; 46 vector<int>vec(vec1.begin(), vec1.begin() + 4); 47 cout << vec; 48 } 49 50 //从数组中获取初值(兼容C语言) 51 void text5() 52 { 53 int a[] = { 1,2,3,4,5,6,7,8,9,10 }; 54 vector<int>vec(a, a + 7); 55 cout << vec; 56 } 57 58 //vector对象的常用内置函数使用 59 60 //assgin(重新分配内存空间) 61 void text6() 62 { 63 vector<int>vec1{ 1,2,3,4,5 }; 64 vector<int>vec2{ 6,7,8,9,10}; 65 vec1.assign(vec1.begin(), vec1.begin()+3); 66 cout << vec1; 67 } 68 69 //back(返回最后一个元素) 70 void text7() 71 { 72 vector<int>vec{ 1,2,3,4,5,6 }; 73 cout<<vec.back(); 74 } 75 76 //front(返回第一个元素) 77 void text8() 78 { 79 vector<int>vec{ 1,2,3,4,5,6 }; 80 cout << vec.front(); 81 } 82 83 //clear(清空元素) 84 void text9() 85 { 86 vector<int>vec{ 1,2,3,4,5,6 }; 87 vec.clear(); 88 cout << vec; 89 } 90 91 //empty(判断a是否为空,空则返回true,非空则返回false) 92 void text10() 93 { 94 vector<int>vec{ 1,2,3,4,5,6 }; 95 auto x=vec.empty(); 96 cout << x; 97 } 98 99 //pop_back(删除最后一个元素) 100 //push_back(在最后追加元素) 101 void text11() 102 { 103 vector<int>vec{ 1,2,3,4,5,6,7,8,9,10 }; 104 vec.pop_back(); 105 cout << vec; 106 int a = 10; 107 vec.push_back(a); 108 cout << vec; 109 } 110 111 //erase(指定位置删除) 112 //insert(指定位置插入) 113 void text12() 114 { 115 vector<int>vec={ 1,2,3,4,5,6,7,8,9,10 }; 116 //删除一块连续的数据 117 vec.erase(vec.begin(), vec.begin() + 4); 118 cout << vec; 119 //删除指定位置的数据 120 vec.erase(vec.begin() + 4); 121 cout<<vec; 122 //在a的第一个元素(从第0个算起)位置插入3个数,其值为5, 123 vec.insert(vec.begin() + 1,3,5); 124 //指定位置插值 125 vec.insert(vec.begin() + 1, 999); 126 cout<<vec; 127 } 128 129 //size(返回a中元素的个数) 130 void text13() 131 { 132 vector<int>vec = { 1,2,3,4,5,6,7,8,9,10,11 }; 133 cout << vec.size()<<endl; 134 } 135 136 //capacity(返回a在内存中总共可以容纳的元素个数) 137 void text14() 138 { 139 vector<int>vec = { 1,2,3,4,5,6,7,8,9,10,11 }; 140 vec.pop_back(); 141 vec.pop_back(); 142 vec.pop_back(); 143 int a = 990; 144 cout << vec; 145 vec.push_back(a); 146 cout << vec; 147 cout << vec.capacity(); 148 149 } 150 151 //resize(将a的现有元素个数调整至10个,多则删,少则补) 152 void text15() 153 { 154 vector<int>vec = { 1,2,3,4,5,6,7,8,9,10}; 155 vec.resize(15); 156 cout << vec; 157 //将a的现有元素个数调整至10个,多则删,少则补,其值为2 158 vec.resize(25, 2); 159 cout << vec; 160 } 161 162 //reserver(扩容,只增不减) 163 void text16() 164 { 165 vector<int>vec = { 1,2,3,4,5,6,7,8,9,10 }; 166 vec.reserve(100); 167 cout<<vec.capacity()<<endl; 168 } 169 170 //swap(整体交换) 171 void text17() 172 { 173 vector<int>vec1{ 1,2,3,4,5 }; 174 vector<int>vec2{ 6,7,8,9,10 }; 175 vec1.swap(vec2); 176 cout << vec1; 177 cout << vec2; 178 } 179 180 int main() 181 { 182 text17(); 183 }
vector兼容C语言
1 //vector的特性非常强大了,但是,我们很多情况要使用c语言的数组,可能旧的函数和接口需要调用C语言的数组函数 2 //data() 函数,返回C语言的指针 3 //通过data函数返回C语言指针 4 vector<int> vec(10); 5 int *p=vec.data(); 6 //通过首地址和尾地址,进行拷贝原来的数组 7 int arr[10] = { 98, 21, 654, 78, 6, 54, 21, 32, 65, 12 }; 8 vector<int> vec2(arr,arr+10); 9 10 //使用二维vector数组 11 //二维的vector可以直接用嵌套的方式来进行创建,就是模板中套用 vector 模板 12 //创建一个二维的vector,二维的vector可以每个vector长度不一样 13 vector<vector<int>> v2; 14 //使用匿名构造插入一个vector 15 v2.push_back(vector<int>(10)); 16 v2.push_back(vector<int>(5)); 17 18 //访问二维数组元素 19 v2[1][3]=32; 20 21 //遍历二维数组的所有元素 22 for (vector<int>& e2 : v2) 23 { 24 //e2是一个vector<int> 加引用可以防止数组被直接拷贝 25 for (int e : e2) 26 { 27 cout << e << " "; 28 } 29 cout << endl; 30 } 31

浙公网安备 33010602011771号