【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;}
原创粉丝点击