基本摘抄自百度百科
其中,7 的 清空向量转载自 https://blog.csdn.net/a272846945/article/details/51182144
1,使用条件
头文件 <vector> 和 using namespace std; (因为他是属于 C++ 的)
2, 定义:简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。(度娘)
3,使用 :
vector <int> c; // 长度未知,未初始化
vector <int> c(10); // 长度为 10 ,未初始化
vector <int> c(10,1); // 长度为 10 ,全部初始化为 1
4,函数
c.assign(beg,end):将[beg; end)区间中的数据赋值给c。
c.assign(n,elem):将n个elem的拷贝赋值给c。
c.empty(): 空返回true,否则返回false
c.clear(): 清空元素,但不回收空间
c.front():传回第一个数据
c.back():传回最后一个数据,不检查这个数据是否存在。
c.begin():传回迭代器中的第一个数据地址。
c.end(): 指向迭代器中末端元素的下一个,指向一个不存在元素。
insert(c.begin()+2,a) 在第三给元素前面插入 a
erase(c.begin(),c.begin()+3); 删除一个区间,从第一个元素到第二个元素,不包括第三个元素
find(c.begin(),c.end(),w); 从c.begin()(含它)到c.end()(不含它)的元素中查找 w,若存在w,则返回其在 vector 中的位置,若不存在,则返回 c.end() 的地址
sort(c.begin(),c.end()); 从c.begin()(含它)到c.end()(不含它)的元素进行从小到大排列 需要头文件#include<algorithm>? 这个是快排的函数
vector添加数据的缺省方法是push_back(), 而不能直接用下标赋值。因为他是动态分配内存的,使用下标只能用来获取已经存在的元素 ,它并不能分配内存给新加进来的数据
push_back(): 函数表示将数据添加到 vector 的尾部,并按需要来分配内存。
pop_back(); 函数表示删除 vector 的最后一个数据
5,打印
根据其数据类型,与相同类型的数组操作基本一样
6,缺点
时间:运行速度与数组相比较慢
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<vector> #include<map> using namespace std; map<vector<char>, int>num; int main(void) { char s1[15]; while (gets_s(s1) && s1[0]) { char s2[15] = { 0 }; for (int i = 0; s1[i]; i++) { s2[i] = s1[i]; vector<char> s; // for循环开头重新定义 for (int i = 0; s2[i]; i++) { s.push_back(s2[i]); } num[s]++; //printf("%d ", num[s]); } } while (scanf("%s", s1) != EOF) { vector<char> s; //// for循环开头重新定义 for (int i = 0; s1[i]; i++) { s.push_back(s1[i]); } printf("%d ", num[s]); } system("pause"); return 0; }
②如果我们只是做题,clear(); 就可以继续输入下一组数据了,尽管占据的内存大小不一定是我们希望的大小(不是输入新的数据后应该占据的内存大小),但一般不会影响到做题。
③用 swap 函数交换,原理开头连接里有
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<vector> #include<algorithm> using namespace std; int main(void) { vector<int>a; //本质为数组 for (int i = 20 - 1; i >= 0; i--) { a.push_back(i); //插入尾部 } printf("%d ", a[5]); //查询第六个元素 for (int i = 0; i < a.size(); i++) //遍历 { printf("%d ", a[i]); }puts(""); puts("sort:"); sort(a.begin(), a.end()); // 排序 a.erase(a.begin() + 4); // 删除第五个元素 for (int i = 0; i < a.size(); i++) { printf("%d ", a[i]); }puts(""); system("pause"); return 0; }
9,二维数组
int main(void) { vector<vector<int>>image(100, vector< int>(100,0)); // 初始化 行列 初始值 int sr = 1, sc = 1, newColor = 2; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { scanf("%d", &image[i][j]); } } image = floodFill(image, sr, sc, newColor); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { printf("%d ", image[i][j]); }puts(""); } system("pause"); return 0; }