首页 / C++ / C++学习笔记:vector容器
C++学习笔记:vector容器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++学习笔记:vector容器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6355字,纯文字阅读大概需要10分钟。
内容图文
![C++学习笔记:vector容器](/upload/InfoBanner/zyjiaocheng/616/f8b46f3e27db402e97ccaa994089f02d.jpg)
1 基本
vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,使用时候需要包含:
#include <vector>
2 常用操作
初始化
vector<int> a(10);
//定义了10个整型元素的向量,没有给出初值,其值是不确定的。
vector<int> a(10,1);
//定义了10个整型元素的向量,初始化的值为1
vector<int> a(b);
//用b向量来创建a向量,b也为vector类型
vector<int> a(b.begin(),b.begin+3);
//定义了a值为b中第0个到第2个(共3个)元素
int b[7]={1,2,3,4,5,9,8}; vector<int> a(b,b+7);
//从数组中获得初值
操作函数
//-------------返回值(调用方式)--------
a.back(); //返回a的最后一个元素
a.front(); //返回a的第一个元素
a[index]; //返回a的第i个元素,当且仅当a[i]存在
a.at(index) //传回索引idx所指的数据,如果idx越界,抛出out_of_range。
a.size(); //返回a中元素的个数;
a.capacity(); //返回a在内存中总共可以容纳的元素个数
a.empty(); //判断a是否为空,空则返回ture,不空则返回false
//----------------删除-------------------
a.clear(); //清空a中的元素
a.pop_back(); //删除a向量的最后一个元素
a.erase(a.begin()+1,a.begin()+3);
//删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+ 3(不包括它)
//-----------------赋值方法--------------
a.push_back(5); //在a的最后一个向量后插入一个元素,其值为5
a.insert(a.begin()+1,5); //在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4
a.insert(a.begin()+1,3,5); //在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5
a.insert(a.begin()+1,b+3,b+6); //b为数组,在a的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元素(不包括b+6),如b为1,2,3,4,5,9,8 ,插入元素后为1,4,5,9,2,3,4,5,9,8
a.assign(b.begin(), b.begin()+3);
//b为向量,将b的0~2个元素构成的向量赋给a
a.assign(4,2); //是a只含4个元素,且每个元素为2
//---------------其他操作---------------
a.resize(10); //将a的现有元素个数调至10个,多则删,少则补,其值随机
a.resize(10,2); //将a的现有元素个数调至10个,多则删,少则补,其值为2
a.reserve(100); //将a的容量(capacity)扩充至100,也就是说现在测试a.capacity();的时候返回值是100.这种操作只有在需要给a添加大量数据的时候才 显得有意义,因为这将避免内存多次容量扩充操作(当a的容量不足时电脑会自动扩容,当然这必然降低性能)
a.swap(b); //b为向量,将a中的元素和b中的元素进行整体性交换
迭代器
迭代器介绍:
迭代器是一种检查容器内元素并遍历元素的数据类型。c++更趋向于使用迭代器而不是下标操作,因为标准库为每一种标准容器(如vector)定义了一种迭代器类型,而只有少数容器(如vector)支持下标操作访问容器元素。
下面是一个典型利用iterator 来遍历vector的例子
int a[6]={1,2,3,4,5,6};
vector<int> b;
vector<int> c(a,a+4);
for(vector<int>::iterator it=c.begin();it<c.end();it++)
b.push_back(*it);
比较
相关算法
使用时包含一下算法的头文件,用vector定义的数据就可以方便地使用下面的算法
#include<algorithm>
(1)sort(a.begin(),a.end()); //对a中的元素进行从小到大排列
(2)reverse(a.begin(),a.end()); //对a中的的元素倒置,如a中元素为1,3,2,4,倒置后为4,2,3,1
(3)copy(a.begin(),a.end(),b.begin()+1); //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素
(4)find(a.begin(),a.end(),10); //在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置
测试代码
#include<vector>
#include<iostream>
#include <stdlib.h>
using namespace std;
int main()
{
vector<int> vec(3, 0);
vector<int>::iterator iter;
vector<int>::iterator begin = vec.begin();
vector<int>::iterator end = vec.end();
cout << "vec:";
for (iter = begin; iter != end; iter++)
{
static std::size_t i = 0;
cout << *iter << ",";
i++;
}
cout << endl;
cout << "size:" << vec.size() << endl;
cout << "capacity:" << vec.capacity() << endl;
//
cout << endl;
vec.push_back(1);
vec.push_back(2);
begin = vec.begin();
end = vec.end();
cout << "push back 1 and 2 based on above;vec:";
for (iter = begin; iter != end; iter++)
{
static std::size_t j = 0;
cout << *iter << ",";
j++;
}
cout << endl;
cout << "size:" << vec.size() << endl;
cout << "capacity:" << vec.capacity() << endl;
//
cout << endl;
vec.pop_back();
begin = vec.begin();
end = vec.end();
cout << "pop one element based on above;vec:";
for (iter = begin; iter != end; iter++)
{
static std::size_t k = 0;
cout << *iter << ",";
k++;
}
cout << endl;
cout << "size:" << vec.size() << endl;
cout << "capacity:" << vec.capacity() << endl;
begin = vec.begin();
end = vec.end();
cout << endl;
if (vec.empty())
{
cout << "vec is empty" << endl;
}
else
{
cout << "vec is not empty" << endl;
}
cout << endl;
cout << "based on the above:" << endl;
cout << " vec.front():" << vec.front() << endl;
cout << " vec.back():" << vec.back() << endl;
begin = vec.begin();
end = vec.end();
cout << " size:" << vec.size() << endl;
cout << " capacity:" << vec.capacity() << endl;
cout << "vec:";
for (iter = begin; iter != end; iter++)
{
static std::size_t l = 0;
cout << *iter << ",";
l++;
}
cout << endl;
cout << endl;
cout << "call at(),based on the above:" << endl;
cout << " vec.at():" << vec.at(3) << endl;
begin = vec.begin();
end = vec.end();
cout << " size:" << vec.size() << endl;
cout << " capacity:" << vec.capacity() << endl;
cout << "vec:";
for (iter = begin; iter != end; iter++)
{
static std::size_t m = 0;
cout << *iter << ",";
m++;
}
cout << endl;
//
cout << endl;
cout << "call clear(),based on the above:" << endl;
vec.clear();
begin = vec.begin();
end = vec.end();
cout << " size:" << vec.size() << endl;
cout << " capacity:" << vec.capacity() << endl;
cout << "vec:";
for (iter = begin; iter != end; iter++)
{
static std::size_t m = 0;
cout << *iter << ",";
m++;
}
cout << endl;
//
cout << endl;
for (int i = 1; i<8; i++)
{
vec.push_back(i);
}
cout << "push_back 1,2,3,4,5,6,7 based on above;vec:";
begin = vec.begin();
end = vec.end();
for (iter = begin; iter != end; iter++)
{
static std::size_t m = 0;
cout << *iter << ",";
m++;
}
cout << endl;
vec.erase(vec.begin() + 2);
cout << "call vec.erase(3),vec:";
begin = vec.begin();
end = vec.end();
for (iter = begin; iter != end; iter++)
{
static std::size_t m = 0;
cout << *iter << ",";
m++;
}
cout << endl;
cout << " size:" << vec.size() << endl;
cout << " capacity:" << vec.capacity() << endl;
//
cout << endl;
vec.erase(vec.begin() + 1, vec.begin() + 3);
cout << "call vec.erase(1,3),vec:";
begin = vec.begin();
end = vec.end();
for (iter = begin; iter != end; iter++)
{
static std::size_t m = 0;
cout << *iter << ",";
m++;
}
cout << endl;
cout << " size:" << vec.size() << endl;
cout << " capacity:" << vec.capacity() << endl;
system("pause");
return 1;
}
内容总结
以上是互联网集市为您收集整理的C++学习笔记:vector容器全部内容,希望文章能够帮你解决C++学习笔记:vector容器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。