标签:catch except 检查 vector ima number 指定 font assign
这篇会有点乱,但最后尽量总结好。
先看下这次的代码
#include<iostream> #include<vector> using namespace std; int main(){ vector<int> v; v.reserve(10);//保留适当的空间 //加入7个元素 int size; for(int i=0; i<7; i++) v.push_back(i); try { // 第一种没有边界检查不会报错,第二种有边界检查会报错, // 这或许是我们使用v.at()的原因吧 int iVal1 = v[7]; // not bounds checked - will not throw int iVal2 = v.at(6); // bounds checked - will throw if out of range size=v.size(); //输出容器里面元素的个数 cout<<"首次添加7个元素后容器里元素个数:"<<size<<endl; //输出7个元素 cout<<"打印容器里面的7个元素"<<endl; for(int i=0;i<7;i++){ int number=v.at(i); cout<<number<<endl; } } catch(const exception& e) { cout << e.what(); } //容器打大小打印一遍 int capa=v.capacity(); cout<<"容器大小:"<<capa<<endl; //加入7个元素,现在有14个元素了,开始我们保留的容器空间是10. //现在超过预留空间了,看会不会自动以16的倍数增加 ,猜测都不会, //要不然要v.reserve(10)有什么用呢? //额,,,猜错了,它会增加,而且不是以16的倍数增加,以v.reserve的倍数增加 for(int i=0; i<7; i++) v.push_back(i); //打印容器大小 capa=v.capacity(); cout<<"再添加7个元素后的容器大小:"<<capa<<endl; size=v.size(); cout<<"再添加7个元素后的容器里面元素的个数:"<<size<<endl; cout<<"打印这14个元素"<<endl; for(int i=0;i<14;i++){ int number=v.at(i); cout<<number<<endl; } for(int i=0;i<4;i++){ v.pop_back(); } size=v.size(); cout<<"删除4个元素后的容器里面元素的个数:"<<size<<endl; return 0; }
结果如下
一、首先用到了v.reserve()这个方法,它的解释是保留适当空间,上次我没用这个,添加元素时以16的倍数增加,但通过上面的代码,添加元素超过10个后,他自动增加的容量是10,说明每次超过容量,自动增加的容量是10,也就是这里设置的v.reserve(),没使用这个v.reserve()时,系统自动默认是v.reserve(16),以16的倍数增加。
二、再是找到指定位置的元素用的方法是v.at(),大多时候用这个方法。当你查找的元素位置大于已有元素个数,就是超过了边界值时,使用try-catch配合使用他会有报错,而直接使用
V[7]。超多边界值时,它的返回值是0,是一个错误的值。
三、返回容器中元素的个数的方法是v.size()。
四、删除元素好像只知道从最后面删除,方法是v.pop_back();删除最后的一个元素,在上面的代码里面也有显示。
五、 可以看到这个vetor的插入和删除操作分别是v.push_back(i)和v.pop_back(),且都是在末尾进行的,很容易联想到是栈,我反正觉得就是栈的知识了,这样也好记忆这个
v.push_back(i)和v.pop_back(),push和pop。
它还有很多方法,今天就先这样吧!
最后又一个问题,删除元素后,容器的容量会自动变小吗?用v.reserve()和不用时都是一样的情况吗?黑了,看不见了,下次再弄吧。
函数 |
表述 |
c.assign(beg,end) c.assign(n,elem) |
将[beg; end)区间中的数据赋值给c。 将n个elem的拷贝赋值给c。 |
c.at(idx) |
传回索引idx所指的数据,如果idx越界,抛出out_of_range。 |
c.back() |
传回最后一个数据,不检查这个数据是否存在。 |
c.begin() |
传回迭代器重的可一个数据。 |
c.capacity() |
返回容器中数据个数。 |
c.clear() |
移除容器中所有数据。 |
c.empty() |
判断容器是否为空。 |
c.end() |
指向迭代器中的最后一个数据地址。 |
c.erase(pos) c.erase(beg,end) |
删除pos位置的数据,传回下一个数据的位置。 删除[beg,end)区间的数据,传回下一个数据的位置。 |
c.front() |
传回第一个数据。 |
get_allocator |
使用构造函数返回一个拷贝。 |
c.insert(pos,elem) c.insert(pos,n,elem) c.insert(pos,beg,end) |
在pos位置插入一个elem拷贝,传回新数据位置。 在pos位置插入n个elem数据。无返回值。 在pos位置插入在[beg,end)区间的数据。无返回值。 |
c.max_size() |
返回容器中最大数据的数量。 |
c.pop_back() |
删除最后一个数据。 |
c.push_back(elem) |
在尾部加入一个数据。 |
c.rbegin() |
传回一个逆向队列的第一个数据。 |
c.rend() |
传回一个逆向队列的最后一个数据的下一个位置。 |
c.resize(num) |
重新指定队列的长度。 |
c.reserve() |
保留适当的容量。 |
c.size() |
返回容器中实际数据的个数。 |
c1.swap(c2) swap(c1,c2) |
将c1和c2元素互换。 同上操作。 |
标签:catch except 检查 vector ima number 指定 font assign
原文地址:https://www.cnblogs.com/simongreen/p/9373852.html