【c++】use vector
来源:互联网 发布:kali linux ddos 编辑:程序博客网 时间:2024/06/06 03:08
#include <iostream>#include <vector>#include <string>using namespace std;int main(){ //vector的定义和初始化 cout << "\n定义和初始化vector:--------->" << endl; vector<int> v1;//定义一个空的vector,执行默认初始化 vector<int> v2(v1);//定义一个拷贝v1的副本 //指定数量的初始化 vector<string> v3(3, "str");//定义一个初始含有3个“str”字符串的vector vector<int> v4(10);//定义初始含有10个默认初始化的vector(对于int,默认初始化全为0,对于string,全为空字符串) //用初始化列表进行初始化,注意是{ }而不是( ),前者用于列表初始化,后者用于提供构造信息,如v3和v4 vector<int> v5{ 1, 2, 3, 4, 5 };//定义一个被自定义初始化的vector vector<int> v6 ={ 1, 2, 3 };//等价于v5 //使用assign()为vector赋值(注意不是添加,而是覆盖) v1.assign(v5.begin(), v5.end() - 2);//将v5的开始到倒数第三个元素拷贝给v1 v1.assign(4, 3);//使用4个3为v1赋值 //使用back()获取vector的最后一个元素 cout <<"\n使用back()获取vector的最后一个元素:"<< v1.back() << endl; //使用front()获取vector的第一个元素 cout <<"\n使用front()获取vector的第一个元素:"<< v1.front() << endl; //使用insert()向vector中插入元素(是插入,不是覆盖,也不是替换,元素将后移) v1.insert(v1.begin(), 5);//在开始位置插入元素5 v1.insert(v1.begin()+1, 3, 5);//在第一号开始插入3个5 int arr[5] = { 1, 2, 3, 4, 5 }; v1.insert(v1.begin(), arr + 1, arr + 3);//将数组b的第1和第2个元素插入到开始位置 //使用push_back()添加元素到vector末尾,vector能高效管理内存,所以在定义时指定大小(v3,v4)是没有必要的。 cout << "\n使用push_back()添加元素到vector末尾--------------->" << endl; int a; //cin返回为输入流,当输入流为无效(如需要int输入string时,vs测试是直接退出程序,无任何提示) //或输入文件结束符EOF(windows下为ctrl+z,类unix下为ctrl+d)结束 //while (cin >> a){ // v1.push_back(a); //} v1 = { 1, 2, 4, 5, 6, 5 }; //使用empty()判断vector是否为空 cout << "\n判断vector是否为空----------------->" << endl; if (v1.empty()){ cout << "v1 is empty!" << endl; } else{ cout << "v1 is not empty!" << endl; } //使用size()返回vector元素个数 cout << "\nnumber of v1 is:" << v1.size() << endl; //使用resize()来重新定义vector大小 v1.resize(20);//原来元素多则删,少则补随机值 v1.resize(20, 2);//原来元素多则删,少则补2 //使用下标运算符[ ]访问指定位置的元素(返回元素的引用,故只要元素不是常量,就可以用下标来对元素进行赋值操作, //但下标不能用于添加新元素) cout << "\n使用下标[0]访问指定位置的元素--------------->" << endl; cout << v1[0] << endl; //使用=拷贝替换,也可以理解为赋值,整个vector全部替换,包括size等信息 v2 = v5; cout << "\n使用=拷贝替换后的v2------------->" << endl; for (int i = 0; i < v2.size(); i++){ cout << v2[i] << " "; } //使用列表{ }来拷贝替换 v2 = { 2, 3, 4 }; cout << "\n使用列表{ }来拷贝替换后的v2------------->" << endl; for (int i = 0; i < v2.size(); i++){ cout << v2[i] << " "; } //使用==判断两vector相等,当且仅当对应元素都相等时为真 //!=同理 cout << "\n使用==判断两vector相等-------------->" << endl; if (v1 == v2){ cout << "v1 = v2!" << endl; } else{ cout << "v1 != v2!" << endl; } //使用关系运算符(>,<,>=,<=)判断两个vector大小 //按字典顺序进行比较 cout << "\n使用关系运算符判断两个vector大小---------->" << endl; if (v1 > v2){ cout << "v1 > v2" << endl; } //使用范围for来访问vector中的元素 cout << "\n使用范围for来访问vector中的元素----------->" << endl; for (auto &i : v2){ //i为元素的引用,这样可以通过i来修改v2的元素 i *= i; } for (auto i : v2){ //只读,不能修改 cout << i << " "; } //使用迭代器(与指针类似) //使用begin()返回表示第一个元素的迭代器 cout << "\n使用begin()返回表示第一个元素的迭代器----------->" << endl; auto b = v1.begin(); cout << *b << endl; //使用end()返回指向尾元素之后的位置的迭代器(尾后迭代器) //当vector为空时,begin()和end()都返回尾后迭代器 cout << "\n使用end()返回指向尾元素之后的位置的迭代器----------->" << endl; auto e = v1.end(); cout << *(e-1) << endl;//访问*e将会出错 //迭代器运算 cout <<"返回迭代器所指的元素的引用:"<< *b << endl; //iter->mem,返回iter所指的元素(类,结构体等)mem成员 //cout << "返回上一个元素:" << *(--e) << endl; //cout << "返回下一个元素:" << *(++b) << endl; //==和!=分别用于判断两个迭代器是否相等 //一个综合的例子: cout << "\n一个综合的例子:-------->" << endl; for (auto it = v1.begin(); it != v1.end(); it++){ cout << *it << " "; } //迭代器类型,前面我们获取的迭代器类型都是用auto自动推算的,也可以手动添加 cout << "\n定义读写义迭代器:------------>" << endl; for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++){ cout << *it << " "; *it += 1; } //如果vector中的元素是一个常量,则只能使用const_iterator //若vector中元素是常量,则begin()和end()返回只读迭代器, //也可以使用cbegin()和cend()来返回非常量元素容器的只读迭代器 vector<const int> v7 = { 1, 2, 3, 4, 5 }; cout << "\n定义只读(const)义迭代器:------------>" << endl; for (vector<const int>::const_iterator it = v7.cbegin(); it != v7.cend(); it++){ cout << *it << " "; } //使用解引用符号获取迭代器所指元素 cout << "\n使用解引用符号获取迭代器所指元素:" << *(v1.begin()) << endl; //对于元素是类或者结构体的容器,可以使用解引用和.访问成员, //也可以直接使用箭头运算符->访问成员(和指针一样一样的) // //可以使用+、-、+=、-=一个整数值来是迭代器跳过一些元素 //可以将两个迭代器相减得到两迭代器之间的差值 //可以使用>、>、=<、<=来比较两个迭代器的大小 //使用pop_back()来删除vector的尾元素 v1.pop_back(); //使用erase()来删除元素 v1.erase(v1.begin(), v1.begin() + 5);//删除开始到begin()+5之前那个元素,不包括后者 //使用clear()来清空vector v1.clear(); //使用{}来将数组中的元素全部初始化为0,不初始化则全为随机值 int arr1[12]{}; for (auto i : arr1){//可以使用范围for循环访问数组 cout << i << " "; } system("pause"); return 0;}
阅读全文
0 0
- 【c++】use vector
- C++Vector
- c++vector
- c++:vector
- <C++>vector
- C++vector
- 【c++】【vector】
- C++ vector
- c++: vector
- c ++ vector
- C++vector
- c++:vector
- C++<vector>
- C++Vector
- Be careful to use iterator - vector.begin()
- c/c++,vector
- 【c/c++】Vector入门
- [C++] Use Endl Judiciously
- 【JEECG_3.7.1】列表多表头的设计
- 文章标题
- Spring Bean加载源码解析
- rocket mq支持OpenMessaging访问示例
- JTA的事务管理由UserTransaction管理.
- 【c++】use vector
- cas单点登录循环重定向问题
- http://9713bbb1.wiz03.com/share/s/2n4XKN1YKkvr2PQq7C18Rgeg2BZisx020QAj2zEMAn3mZxJG
- stm 32 在线升级
- jenkins安装后 配置免密登录 jenkins连接不上
- 201403-2窗口
- Oracle查看修改表空间
- maven 下载安装 myeclipse 2014
- ES6常用命令