首页 / C++ / C++中vector容器的相关操作
C++中vector容器的相关操作
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++中vector容器的相关操作,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4552字,纯文字阅读大概需要7分钟。
内容图文
![C++中vector容器的相关操作](/upload/InfoBanner/zyjiaocheng/621/011081e2a4af41f1a4617ede37852e39.jpg)
vector基本概念
普通数组时静态空间,而vector可以动态扩展,但是vector的动态扩展并不是在存储空间后面添加存储位置,而是寻找新的更大的存储位置,然后将原空间中的所有的数据复制到新的存储位置里。
vector中常用的迭代器:begin指向第一个,end指向最后一个的下一个
,rbegin指向最后一个,rend指向第一个的前一个,vecotr迭代器比较强悍,不需要连续的访问方式,支持随机访问
//vector的构造方式
/*
vector v;//采用默认构造函数
vector(v.begin(),v.end());//将v.begin()到v.end()中的元素拷贝给本身,前闭后开
vector(n,elem);//构造函数将n个elem拷贝给本身
vector(const vector&vec);//采用拷贝构造函数
*/
#include<iostream>
#include<string>
#include<vector>
using namespace std;
/*
void print(vector<int> V)
{
for (vector<int>::iterator it = V.begin();it != V.end();it++)
cout << *it << " ";
cout << endl;
}
int main()
{
vector<int> V;
for (int i = 0;i < 10;i++)
V.push_back(i);
print(V);
vector<int> v(V.begin(), V.end());
print(v);
vector<int> v1(10, 10);
print(v1);
vector<int> v2(v1);
print(v2);
system("pause");
}
*/
/*
vector容器的赋值
vector operator=(const vector&v)//将v中的值赋值给目标
assign(v.begin,v.end)//将[v.begin,v.end)中的数据传递给对象
assign(n,elem)//将n个elem传递给对象
*/
/*
void print(vector<int>&v)
{
for (vector<int>::iterator it=v.begin();it != v.end();it++)
cout << *it << " ";
cout << endl;
}
int main()
{
vector<int> v;
for (int i = 0;i < 10;i++)
v.push_back(i);
vector<int> v1 = v;
vector<int> v2;
v2.assign(v1.begin(), v1.end());
//print(v2);
vector<int> v3;
v3.assign(10, 1);
print(v3);
system("pause");
}
*/
//vector容器的的容量和大小操作
//empty用来检测容器是否为空
//capacity用来检测容器的容量
//size用来检测容器中数据数量
//resize用来重新指定容器长度,如果长度大于原来的长度那么使用0来填充,如果比原来短了那么会删除超出部分
//注意resize指定的是size而不是capacity
/*
void print(vector<int>&v)
{
for (vector<int>::iterator it = v.begin();it != v.end();it++)
cout << *it << " ";
cout << endl;
}
int main()
{
vector<int> v;
for (int i = 0;i < 10;i++)
v.push_back(i);
print(v);
cout << v.empty() << endl;
cout << v.capacity() << endl;
cout << v.size() << endl;
v.resize(15);
cout << v.capacity() << endl;
cout << v.size() << endl;
print(v);
system("pause");
}
*/
//vector的插入和删除
/*
push_back(ele)在尾部插入数据
pop_back()删除最后一个元素
insert(const_iterator pos,int ele)迭代器指向位置插入ele
insert(const_iterator pos,int cout,ele)迭代器指向位置pos插入cout个元素ele
erase(const_iterator pos)删除pos指向位置元素
erase(const_iterator start,const_iterator end);删除迭代器start到end之间的元素,注意是[start,end);
*/
/*
void print(vector<int>&v)
{
for (vector<int>::iterator it = v.begin();it != v.end();it++)
cout << *it << " ";
cout << endl;
}
int main()
{
vector<int> v;
for (int i = 0;i < 10;i++)
v.push_back(i);
print(v);
v.pop_back();
print(v);
v.insert(v.begin(), 100);
print(v);
v.insert(v.begin(), 2, 100);
print(v);
v.erase(v.begin());
print(v);
v.erase(v.begin(), v.begin() + 2);
print(v);
system("pause");
}
*/
//vector容器的存取
/*
[idx]返回idx所指向的数据
at(int idx)返回idx所指的数据
front返回容器中的第一个数据,这里返回的是数据begin返回的是迭代器
back返回容器中的最后一个数据,这里返回的数据,end()返回的是迭代器
*/
/*
void print(vector<int>&v)
{
for (vector<int>::iterator it = v.begin();it != v.end();it++)
cout << *it << " ";
cout << endl;
}
int main()
{
vector<int> v;
for (int i = 0;i < 10;i++)
v.push_back(i);
for (int i = 0;i < 10;i++)
cout << v[i] << " ";
cout << endl;
for (int i = 0;i < 10;i++)
cout << v.at(i) << " ";
cout << endl;
cout << v.front() << endl;
cout << v.back() << endl;
getchar();
}
*/
//vector互换容器
/*
swap(vectorv)将自身内容与v中内容进行互换,可以借助swap实现内存的合理化
当v容器扩大以后,如果使用resize来减少其尺寸,那么v的capacity是不会改变的,
但是可以通过vector(v).swap(v)的方式来使得capacity减小到和size一样大小
*/
/*
void print(vector<int>&v)
{
for (vector<int>::iterator it = v.begin();it != v.end();it++)
cout << *it << " ";
cout << endl;
}
int main()
{
vector<int> v1;
vector<int> v2;
for (int i = 0;i < 10;i++)
{
v1.push_back(i);
v2.push_back(i + 10);
}
print(v1);
print(v2);
v1.swap(v2);
print(v1);
print(v2);
for (int i = 0;i < 10000;i++)
v1.push_back(i);
cout << v1.capacity() << endl;
cout << v1.size() << endl;
v1.resize(3);
cout << v1.capacity() << endl;
cout << v1.size() << endl;
vector<int>(v1).swap(v1);
cout << v1.capacity();
getchar();
}
*/
//vector预留空间
//reserve(int len)预留len个空间,但是该空间均未初始化,不可以访问,下面程序中的n统计了在v的扩充过程中一共扩展了多少次内存
//可以发现不使用reserve的话,需要扩展很多次,很浪费时间
int main()
{
vector<int> v;
int*p = NULL;
int n = 0;
for (int i = 0;i < 10000;i++)
{
v.push_back(i);
if (p != &v[0])
{
p = &v[0];
n++;
}
}
cout << n << endl;
getchar();
}
内容总结
以上是互联网集市为您收集整理的C++中vector容器的相关操作全部内容,希望文章能够帮你解决C++中vector容器的相关操作所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。