vector操作
来源:互联网 发布:c语言开发手册 编辑:程序博客网 时间:2024/05/22 01:33
简介:
vector为了支持快速的随机访问,将每一个元素都紧挨着前一个元素存储。即元素是连续存储的。
vector优点:
支持快速随机访问。
vector缺点:
元素连续存储,带来了内存分配上的问题,不过vector容器采取预留空间的方法。并不是每次都额外开辟空间。
所以,实际上比起list和deque容器(顺序容器一共就3个,即vector,list,deque),vector的增长效率通常会更好。
重要:
一般来说,除非找到选则使用其他容器的更好理由,否则vector容器都是最佳选择。
1、vector对象的定义和初始化:
方法1:
vector<type> vec; //定义一个vector对象;(元素的个数为空)
方法2:
vector<type> vec(num,value); //定义一个vector对象,元素有num个,初值都为value;
例如:
vector<int> vec(10,-1); //定义一个vector对象,包含10个元素,每个元素的初值为-1。
vector<string> vec(10,"hi"); //定义一个vector对象,包含10个元素,每个元素的初始为hi。
方法3:
vector<type> vec(num); //定义一个vector对象,元素有num个,初值由系统设定;
例如:
vector<int> vec(10); //定义一个vector对象,元素有10个,系统设置初值为0。
vector<string> vec(10); //定义一个vector对象,元素有10个,系统设置都为空串。
方法4:
vector<type> vec1;
vector<type> vec2(vec1) //定义一个vector对象vec2,并用对象vec1来对vec2进行初始化。英文解释为:copy elements of vec1 into vec2
2、vector对象的基本操作:
判空 empty
vector<type> vec;
vec.empty(); //为空,返回true。不为空,返回false。
获取vector中成员的个数 size
vector<type> vec;
vector<type>::size_type size;
size=vec.size(); //获取vector中一共有多少个成员。
(
为了提高vector的效率,系统使用的是连续的存储空间(和数组一样)。试想,当我在插入元素时,突然发现后面的空间不可用时,系统将会开辟新的空间,并将原来的元素赋值到新的位置上,然后在后面继续添加成员。为了避免或减少这种情况的发生,在可以预见成员个数时,应该使用resize预留空间。
而list容器使用的是不连续的存储空间。这种清空是不会出现的。
)
例如:
vec.resize(1000);
cout<<vec.size()<<endl; //vec预留的空间中可以存放多少个元素。
vector的capacity()返回在vector不重新开辟空间之前,vector中最多可以存储多少个成员。
取出vector中的第n个成员 vec[n]
vector<type> vec;
vec[n];
注意:: vec[n]可以做左值,即修改vector中第n+1个元素的值,可以通过对vec[n]赋值来实现。
增 push_back insert
vector<type> vec;
vector<type>::value_type value;
vec.push_back(value); //在vector中的最后一个元素的后面插入value。
插入:
vec.insert(iter_pos,value); //在iter_pos的位置上插入value值。
vec.insert(iter_pos,num,value); //在iter_pos的位置上插入num个value值。
vec.insert(iter_pos,iter_begin,iter_end);
//将另外一个顺序容器,iter_begin开始到iter_end结束的元素复制到向量vec中的iter_pos位置。
删 erase pop_back clear
vector<type> vec;
vector<type>::iterator iter = vec.begin();
while(iter != vec.end())
{
iter = vec.erase(iter);
}
删除vector向量的最后一个元素:
vec.pop_back(); //删除vector向量的最后一个元素。
清空:
vec.clear() //将vec向量中的所有元素清空。
改 对vec[n]进行赋值,修改vec中第n+1个元素的值。
例如:
vector<int> vec(5,1);
vec[1]=3; //将vec中的第2个元素的值修改为3
查
使用遍历的方法来查找;
对于经常进行查找的vector,建议使用set代替vector
set是一个只有key,没有value的map,在set中,任何一个值只能出现一次,不过在set中是使用红黑树来处理的,查找性能非常优越,而插入性能不好。
set有find方法,而不像vector的find要指定开始位置。
排序 sort
vec.sort(); //对vec中的成员进行排序。
遍历 iterator 或 下标
方法1:
vector<type>::size_type size = vec.size();
vector<type>::size_type index;
for(index=0;index<size;index++)
{
cout << vec[index] << " ";
}
方法2:
vector<type>::iterator iter = vec.begin();
while(iter != vec.end())
{
cout << *iter << " ";
}
- vector操作
- vector 操作
- vector操作
- vector操作
- vector对象的操作
- vector操作的习题
- vector常用操作
- vector基本操作
- vector对象、下标操作
- C++ vector操作实例
- vector常用操作
- Vector模板常见操作
- vector操作整理
- vector的下标操作
- vector下标操作
- vector中的 相关操作!
- C++Vector简单操作
- vector 对象操作
- C++ Vector 使用总结
- 45个漂亮且有创意的HTML5网站展示
- Android (Linux) Suspend流程
- java静态代码块、初始化块和构造方法的执行顺序
- mysql关闭服务
- vector操作
- OCA、OCP、OCM傻傻分不清?
- 如何修改uC/GUI的仿真窗口大小
- 给部分培训学生的建议
- java数据源配置
- 往MySQL中存储图片
- sfc_os.dll位置
- 如何在 Ubuntu 启用 Radeon 开源驱动的 UVD 硬件解码
- paip.提升程序稳定性---最佳实践