一元购网站怎么做,my23777免费域名查询,中国建设银行在网站怎么签约,电话销售外呼系统软件是STL容器中的一种常用的容器#xff0c;由于其大小(size)可变#xff0c;常用于数组大小不可知的情况下来替代数组。vector容器与数组十分相似#xff0c;被称为动态数组。时间复杂度为O#xff08;1#xff09;。
数组数据通常存储在栈中#xff0c;vector数据通常存储…是STL容器中的一种常用的容器由于其大小(size)可变常用于数组大小不可知的情况下来替代数组。vector容器与数组十分相似被称为动态数组。时间复杂度为O1。
数组数据通常存储在栈中vector数据通常存储在堆中。
动态扩展不是在原空间后加入空间而是寻找更大空间将数据拷贝新空间释放新空间。
头文件#include vector
迭代器类似于指针提供了对象的间接访问但获取迭代器并不是使用取地址符。如果将指针理解为元素的“地址”那么迭代器可以理解为元素的“位置”。可以使用迭代器访问某个元素迭代器也能从一个元素移动到另一个元素。
一个迭代器的范围由一对迭代器表示分别为 begin 和 end。其中 begin 成员返回指向第一个元素的迭代器end 成员返回容器最后一个元素的下一个位置one past the end也就是指向一个根本不存在的尾后位置。
vector初始化 vectorT v1 创建一个名为v1是元素类型为T的空vector vectorint v2 (n): 创建一个vector,元素类型为int元素个数为n值默认为0 vectorint v3 {1,2,3,4,5} vector有5个数注意花括号 vectorintv4 (4,1) vector由4个值为1组成 vectorintv5 (v4) 将v4所有值复制到v5中 vectorintv6(v3.begin(), v3.end()) 将v3的值从头到尾复制到v6 vectorintv7(v3.rbegin(), v3.rend()) 将v3的值从尾到头复制到v7 cbegin 和begin()功能相同在其基础上增加了 const 属性不能用于修改元素。 cend 和end()功能相同在其基础上增加了 const 属性不能用于修改元素。 crbegin 和rbegin()功能相同在其基础上增加了 const 属性不能用于修改元素。 crend 和rend()功能相同在其基础上增加了 const 属性不能用于修改元素。 vector方法
v2.empty() 判断v2是否为空为空返回true否则返回false
v2不为空返回3
if(v2.empty()) {return 2;
}else{return 3;
}
元素长度
v2.size() 返回实际v2中的元素个数
int len v2.size();
v2.capacity()返回v2中可以容纳的元素个数
区分capacity 当前vector分配的大小size 当前使用数据的大小
v2.resize()改变v2中的实际元素个数
v2.reserve()增加v2 的容量
访问元素
operator[] 用于从vector中访问指定元素它接受一个索引并返回指定位置元素的引用。语法 vector::operator[size_type n];
例如v2[n] 是v2第n个位置元素的引用不能用于下标操作添加元素像v2[7]5是错的。vector容器的下标也是从0开始计数的。
vector.at(i)等同于vector[i]访问数组下表的元素例如v2.at(2) 返回下标为2的值的元素
两者区别虽然两者访问元素都不能越界但是operator不做边界检查哪怕越界也会返回一个引用错误的at会做边界检查如果越界会抛出std::out_of_range异常。
coutv2[3]endl;
coutv2.at(3)eendl;
v2.front()返回第一个元素
v2.back()返回最后一个元素
v2.data()返回v2第一个元素的指针
元素排序
sort 需要头文件 #include algorithm
sort(v2.begin(), v2.end())一种是两个参数一般为升序由小到大
sort(v2.begin(), v2.end(), t)是三个参数第三个参数可以写排序规则一般搭配lambda表达式的捕获列表使用
vectorint a{0,10,9,8,1,5,2,3,6,4,7};
bool cmp(int x,int y){return xy;}
sort(a.begin(), a.end(),cmp);
//两者等价
sort(a.begin(), a.end(),[](int x, int y){return x y;});
//原有形式省略是因为C可以自动识别函数返回值得数据类型
sort(a.begin(), a.end(),[](int x,int y) - bool {return xy;} );
reverse(v2.begin(), v2.end()) 逆序输出
reverse(a.begin(), a.end()); // 原位逆序排列
//结果
7 4 ....9 10 0
unique(v2.begin(), v2.end())将输入序列相邻的重复项“消除”一般搭配sort使用先排序后消除。
例如0 0 0 0 3 5 输出后 0 3 5
交换元素
v2.swap() 交换v2 其中的两个元素的所有内容
swap() 函数在头文件 algorithm 和 utility 中都有定义使用时引入其中一个即可。
v2.assign() 用新元素替换所有内容
添加元素
向 vector 容器中添加元素的唯一方式就是使用它的成员函数如果不调用成员函数非成员函数既不能添加也不能删除元素。
v3.push_back(v) 在v3尾端添加一个值为v的元素
v3.push_back(5);
coutv3endl;
//结果 1,2,3,4,5,5
v2.emplace_back() 在尾部添加一个元素 vectorint values{};values.emplace_back(1);values.emplace_back(2);for (int i 0; i values.size(); i) {cout values[i] ;}//结果1 2
两者区别在于底层实现的机制不同。push_back() 向容器尾部添加元素时首先会创建这个元素然后再将这个元素拷贝或者移动到容器中如果是拷贝的话事后会自行销毁先前创建的这个元素而 emplace_back() 在实现时则是直接在容器尾部创建这个元素省去了拷贝或移动元素的过程。
插入元素
v2.insert(pos,elem)在迭代器 pos 指定的位置之前插入一个新元素elem
iterator insert(pos,n,elem)在迭代器 pos 指定的位置之前插入 n 个元素 elem并返回表示第一个新插入元素位置的迭代器。iterator insert(pos,first,last) 在迭代器 pos 指定的位置之前插入其他容器不仅限于vector中位于 [first,last) 区域的所有元素并返回表示第一个新插入元素位置的迭代器。iterator insert(pos,initlist)在迭代器 pos 指定的位置之前插入初始化列表用大括号{}括起来的多个元素中间有逗号隔开中所有的元素并返回表示第一个新插入元素位置的迭代器。
插入有很多种形式
vectorint demo{1,2};
//第一种格式用法
demo.insert(demo.begin() 1, 3);//{1,3,2}
//第二种格式用法
demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}
//可以看出end指的不是数组最后一位而是最后一位的下一个位置
//第三种格式用法
arrayint,3test{ 7,8,9 };
demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}
//第四种格式用法
demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}
v2.emplace() 指定位置前插入一个新元素emplace() 每次只能插入一个元素而不是多个。
vectorint demo1{1,2};
//emplace() 每次只能插入一个 int 类型元素
demo1.emplace(demo1.begin(), 3);
for (int i 0; i demo1.size(); i) {cout demo1[i] ;
}
//结果 3 1 2
emplace与insert比较emplace效率更高因为insert需要将新元素将其生成再将其拷贝或复制到容器中emplace是直接在容器指定位置构造元素。
删除元素 v3.pop_back();
//结果 从1 2 3 4 5 5 变为1 2 3 4 5vectorintdemo{ 1,2,3,4,5 };
auto iter demo.erase(demo.begin() 1);//删除元素 2
for (int i 0; i demo.size(); i) {cout demo[i] ;
}
//iter迭代器指向元素 3
cout endl *iter endl;//结果
1 3 4 5
3
#include vector
#include iostream
#include algorithm
using namespace std;int main()
{vectorintdemo{ 1,2,3,4,5 };//交换要删除元素和最后一个元素的位置swap(*(std::begin(demo)1),*(std::end(demo)-1));//等同于 swap(demo[1],demo[4])//交换位置后的demo容器for (int i 0; i demo.size(); i) {cout demo[i] ;}demo.pop_back();cout endl size is : demo.size() endl;cout capacity is : demo.capacity() endl;//输出demo 容器中剩余的元素for (int i 0; i demo.size(); i) {cout demo[i] ;}return 0;
}
//结果
1 5 3 4 2
size is :4
capacity is :5
1 5 3 4
vectorint demo{ 1,2,3,4,5 };
//删除 2、3
auto iter demo.erase(demo.begin()1, demo.end() - 2);
for (int i 0; i demo.size(); i) {cout demo[i] ;
}//结果
1 4 5
vectorintdemo{ 1,3,3,4,3,5 };
//交换要删除元素和最后一个元素的位置
auto iter remove(demo.begin(), demo.end(), 3);
//输出剩余的元素
for (auto first demo.begin(); first iter;first) {cout *first ;
}
//结果
1 4 5
长度仍为6
注意在对容器执行完 remove() 函数之后由于该函数并没有改变容器原来的大小和容量因此无法使用之前的方法遍历容器而是需要向程序中那样借助 remove() 返回的迭代器完成正确的遍历。
remove() 的实现原理是在遍历容器中的元素时一旦遇到目标元素就做上标记然后继续遍历直到找到一个非目标元素即用此元素将最先做标记的位置覆盖掉同时将此非目标元素所在的位置也做上标记等待找到新的非目标元素将其覆盖。因此demo为1 3 3 4 3 5删除3得到的结果为 1 4 5 4 3 5。
过程3做标记3再做标记4覆盖第一个3做标记3再做标记5覆盖第二个3做标记。
所以可以使用 erase() 成员函数删掉这些 无用 的元素。 vectorintdemo{ 1,3,3,4,3,5 };//交换要删除元素和最后一个元素的位置auto iter remove(demo.begin(), demo.end(), 3);demo.erase(iter, demo.end());//输出剩余的元素for (int i 0; i demo.size();i) {cout demo[i] ;}
//结果 1 4 5
长度变为3 vectorintdemo{ 1,3,3,4,3,5 };//交换要删除元素和最后一个元素的位置demo.clear();cout size is : demo.size() endl;cout capacity is : demo.capacity() endl;
//结果
size is :0
capacity is :6
二维数组
完整版vectorvectorint table(size1, vectorint(size2, 0)); 行列都给了 名为table的vector容器包含元素为vector的容器。列为size2行为size1值为0。
省略版vectorvectorint table; 行列未知 vectorvectorint table5; 行为5也就是长度
获取二维数组长度
int size_row table.size(); //获取行数
int size_col table[0].size(); //获取列数
访问二维数组
for (int i 0; i a.size(); i)
{for (int j 0; j a[0].size(); j)//注意如果arr为空不可直接arr[0]{cout a[i][j] endl;}
} https://blog.csdn.net/aruewds/article/details/117375364
C STL vector插入元素insert()和emplace()详解 (biancheng.net)
http://t.csdnimg.cn/Ej3rl
http://t.csdnimg.cn/ebFXf
使用lambda表达式实现sort的自定义排序 - octal_zhihao - 博客园 (cnblogs.com)
文章转载自: http://www.morning.mtzyr.cn.gov.cn.mtzyr.cn http://www.morning.fhqsm.cn.gov.cn.fhqsm.cn http://www.morning.zhffz.cn.gov.cn.zhffz.cn http://www.morning.qywfw.cn.gov.cn.qywfw.cn http://www.morning.sxfmg.cn.gov.cn.sxfmg.cn http://www.morning.rnnq.cn.gov.cn.rnnq.cn http://www.morning.tjjkn.cn.gov.cn.tjjkn.cn http://www.morning.gkktj.cn.gov.cn.gkktj.cn http://www.morning.nj-ruike.cn.gov.cn.nj-ruike.cn http://www.morning.ebpz.cn.gov.cn.ebpz.cn http://www.morning.zcrjq.cn.gov.cn.zcrjq.cn http://www.morning.gwsfq.cn.gov.cn.gwsfq.cn http://www.morning.dydqh.cn.gov.cn.dydqh.cn http://www.morning.xbmwh.cn.gov.cn.xbmwh.cn http://www.morning.qbzfp.cn.gov.cn.qbzfp.cn http://www.morning.gwjqq.cn.gov.cn.gwjqq.cn http://www.morning.spftz.cn.gov.cn.spftz.cn http://www.morning.trfh.cn.gov.cn.trfh.cn http://www.morning.hlfnh.cn.gov.cn.hlfnh.cn http://www.morning.ljbch.cn.gov.cn.ljbch.cn http://www.morning.hrtwt.cn.gov.cn.hrtwt.cn http://www.morning.bxdlrcz.cn.gov.cn.bxdlrcz.cn http://www.morning.gywxq.cn.gov.cn.gywxq.cn http://www.morning.crhd.cn.gov.cn.crhd.cn http://www.morning.pgrsf.cn.gov.cn.pgrsf.cn http://www.morning.ktlxk.cn.gov.cn.ktlxk.cn http://www.morning.nwfxp.cn.gov.cn.nwfxp.cn http://www.morning.nrddx.com.gov.cn.nrddx.com http://www.morning.ygztf.cn.gov.cn.ygztf.cn http://www.morning.gagapp.cn.gov.cn.gagapp.cn http://www.morning.qczpf.cn.gov.cn.qczpf.cn http://www.morning.wnjwb.cn.gov.cn.wnjwb.cn http://www.morning.bfjtp.cn.gov.cn.bfjtp.cn http://www.morning.jzkqg.cn.gov.cn.jzkqg.cn http://www.morning.jzykq.cn.gov.cn.jzykq.cn http://www.morning.syxmx.cn.gov.cn.syxmx.cn http://www.morning.jftl.cn.gov.cn.jftl.cn http://www.morning.jwqqd.cn.gov.cn.jwqqd.cn http://www.morning.hbdqf.cn.gov.cn.hbdqf.cn http://www.morning.xxiobql.cn.gov.cn.xxiobql.cn http://www.morning.trpq.cn.gov.cn.trpq.cn http://www.morning.mqfw.cn.gov.cn.mqfw.cn http://www.morning.byshd.cn.gov.cn.byshd.cn http://www.morning.fkwgk.cn.gov.cn.fkwgk.cn http://www.morning.jngdh.cn.gov.cn.jngdh.cn http://www.morning.fqpyj.cn.gov.cn.fqpyj.cn http://www.morning.plcyq.cn.gov.cn.plcyq.cn http://www.morning.zqkr.cn.gov.cn.zqkr.cn http://www.morning.0small.cn.gov.cn.0small.cn http://www.morning.knzmb.cn.gov.cn.knzmb.cn http://www.morning.cypln.cn.gov.cn.cypln.cn http://www.morning.qjlkp.cn.gov.cn.qjlkp.cn http://www.morning.mdpkf.cn.gov.cn.mdpkf.cn http://www.morning.fndfn.cn.gov.cn.fndfn.cn http://www.morning.rzpkt.cn.gov.cn.rzpkt.cn http://www.morning.duckgpt.cn.gov.cn.duckgpt.cn http://www.morning.yubkwd.cn.gov.cn.yubkwd.cn http://www.morning.jqzns.cn.gov.cn.jqzns.cn http://www.morning.cplym.cn.gov.cn.cplym.cn http://www.morning.kntbk.cn.gov.cn.kntbk.cn http://www.morning.51meihou.cn.gov.cn.51meihou.cn http://www.morning.fxzlg.cn.gov.cn.fxzlg.cn http://www.morning.pqchr.cn.gov.cn.pqchr.cn http://www.morning.nwjd.cn.gov.cn.nwjd.cn http://www.morning.lxbml.cn.gov.cn.lxbml.cn http://www.morning.tpdg.cn.gov.cn.tpdg.cn http://www.morning.gmyhq.cn.gov.cn.gmyhq.cn http://www.morning.yyngs.cn.gov.cn.yyngs.cn http://www.morning.yydzk.cn.gov.cn.yydzk.cn http://www.morning.rkqqf.cn.gov.cn.rkqqf.cn http://www.morning.rnkq.cn.gov.cn.rnkq.cn http://www.morning.tpfny.cn.gov.cn.tpfny.cn http://www.morning.fgtls.cn.gov.cn.fgtls.cn http://www.morning.mjbkp.cn.gov.cn.mjbkp.cn http://www.morning.hhxpl.cn.gov.cn.hhxpl.cn http://www.morning.dfdhx.cn.gov.cn.dfdhx.cn http://www.morning.syqtt.cn.gov.cn.syqtt.cn http://www.morning.pwsnr.cn.gov.cn.pwsnr.cn http://www.morning.hxycm.cn.gov.cn.hxycm.cn http://www.morning.pbsqr.cn.gov.cn.pbsqr.cn