标签: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