vector容器基本概念(转载)
vector的数据安排以及操作方式,与array非常相似,两者的唯一差别在于空间的运用的灵活性。
Array是静态空间,一旦配置了就不能改变,要换大一点或者小一点的空间,可以,一切琐碎得由自己来,首先配置一块新的空间,然后将旧空间的数据搬往新空间,再释放原来的空间。
Vector是动态空间,随着元素的加入,它的内部机制会自动扩充空间以容纳新元素。因此vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再也不必害怕空间不足而一开始就要求一个大块头的array了。
Vector的实现技术,关键在于其对大小的控制以及重新配置时的数据移动效率,一旦vector旧空间满了,如果客户每新增一个元素,vector内部只是扩充一个元素的空间,实为不智,因为所谓的扩充空间(不论多大),一如刚所说,是”配置新空间-数据移动-释放旧空间”的大工程,时间成本很高,应该加入某种未雨绸缪的考虑。
原文链接:https://blog.csdn.net/qq_42322103/article/details/99685797
vector<int> c //定义一个vector容器
c.clear() //移除容器中所有数据。
c.empty() //判断容器是否为空。
c.erase(pos) //删除pos位置的数据
c.erase(beg,end) //删除[beg,end)区间的数据
c.front() //传回第一个数据。
c.insert(pos,elem) //在pos位置插入一个elem拷贝
c.pop_back() //删除最后一个数据。
c.push_back(elem) //在尾部加入一个数据。
c.resize(num) //重新设置该容器的大小
c.size() //回容器中实际数据的个数。
c.begin() //返回指向容器第一个元素的迭代器
c.end() //返回指向容器最后一个元素的迭代器
c.clear() //清空容器
reverse(v.begin()+x-1,v.begin()+y)//翻转第x个到第y个数
访问 vector 的方法有两种:
方法一:直接访问
方法二:迭代器访问
(1)使用样例
int main() { //顺序访问
vector<int>v;
for (int i = 0; i < 10; i++)
v.push_back(i);
cout << "直接利用下标:";
for (int i = 0; i < v.size(); i++)//方法一
cout << v[i] << " ";
cout << endl;
cout << "利用迭代器:"; //声明一个迭代器,来访问vector容器,作用:遍历或者指向vector容器的元素
vector<int>::iterator it;
for(it = v.begin(); it != v.end(); it++)
cout << *it << " ";
return 0;
}
(2)结构
vector<int>::iterator it; //int 为vector类型,it为迭代器名称(可改变)
for(it=v.begin();it!=v.end();it++) { //v.begin()为vector起始元素,v.end()为vector末尾元素
cout<<*it<<" "; //输出it地址的元素
}//it!=v.end()表示不指向末尾元素 因为地址连续,it++表示下一个元素地址。 vector的迭代器类型支持随机访问。