当前位置: 首页 > news >正文

网站建设 智能建站网站制作

网站建设 智能建站,网站制作,我想建一个网站怎么建,整合营销和链路营销一、基本概念 vector教据结构和数组非常相似,也称为单端数组,但是数组是静态空间,而vector可以动态扩展。 动态的扩展流程如下: 动态扩展并不是在原空间之后续接新空间,而是找更大的广存空间,然后将原数据拷贝新空间&…

一、基本概念

vector教据结构和数组非常相似,也称为单端数组,但是数组是静态空间,而vector可以动态扩展。
动态的扩展流程如下:
动态扩展并不是在原空间之后续接新空间,而是找更大的广存空间,然后将原数据拷贝新空间,释放原空间。
在这里插入图片描述
vector容器的迭代器是支持随机访问的迭代器,也就是说可以随机访问容器内的任何一个位置的数据。

二、vector的构造函数

vector v; 采用模板实现类实现,默认构造函效。
vector(v.begin(), v.end( )); 将v[begin(), end())区间中的元素拷贝给本身。
vector(n,elem) ; 构造函数将n个elem拷贝给本身。
vector( const vector &vec); 拷贝构造函数。
具体的实现方法如下所示:

	//默认构造方式vector<int> v;for (int i = 0; i < 4; i++){v.push_back(i);}VectorPrint(v);// 通过区间的方式进行构造vector<int>v1(v.begin(), v.end());VectorPrint(v1);//通过n个elem的方式构造vector<int>v2(2, 100);VectorPrint(v2);//通过拷贝构造的方式进行传递vector<int>v3(v2);VectorPrint(v3);

三、vector赋值操作

当我们构建好vector之后,我们可以对vector进行赋值操作,具体的样例如下:

vector& operator=( const vector &vec); 重载等号操作符。
assign(beg, end) ;将[beg, end)区间中的数据拷贝赋值给本身。
assign(n,elen); 将n个elem拷贝赋值给本身。
具体的实现细节如下:

	//赋值操作:重载等号vector<int>v1;v1 = v;VectorPrint(v1);//赋值操作:assign操作1vector<int>v2;v2.assign(v1.begin(), v1.end());VectorPrint(v2);//赋值操作:assign操作2vector<int>v3;v3.assign(2, 100);VectorPrint(v3);

四、vector容量和大小

具体的函数接口如下:
empty( ); 判断容器是否为空
capacity(); 容器的容量
size(); 返回容器中元素的个数
resize( int num); 重新指定容器的长度为num,若容器变长,则以默认值0填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
resize( int nun, elem); 重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除
具体的实现样例如下:

	vector<int> v;for (int i = 0; i < 10; i++){v.push_back(i);}if (v.empty()){cout << "容器为空" << endl;}else{cout << "容器不为空" << endl;cout << "容器容量为:" << v.capacity() << endl; cout << "容器的大小为:" << v.size() << endl;} //重新指定容器大小,多出的位置用默认值0填充v.resize(10);//重新指定容器大小,多出的位置用设置值10填充v.resize(15, 10);//重新指定容器大小,超出的部分会被删掉v.resize(2);

五、vector插入和删除

具体的实现接口如下:
push_back(ele);尾部插入元素ele
pop_back();删除最后一个元素
insert (const_iterator pos,ele);迭代器指向位pos插入元素ele
insert( const_iterator pos,int count,ele);迭代器指向位置pos插入count个元素ele
erase(const_iterator pos);删除迭代器指向的元素
erase(const_iterator start,const_iterator end);删除迭代器从start到end之间的元素
clear();删除容器中所有元素
具体样例如下:

	vector<int> v;//尾插法插入数据v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);v.push_back(5);vectorPrint(v);//尾部删除法,一次删一个v.pop_back();vectorPrint(v);//插入,第一个参数是迭代器v.insert(v.begin(), 100);vectorPrint(v);//插入,第一个参数是迭代器,插入两个10v.insert(v.begin(), 2, 10);vectorPrint(v);//删除v.erase(v.begin()+3);vectorPrint(v);//删除一个区间v.erase(v.begin() + 3, v.end()-2);vectorPrint(v);//清空v.clear();vectorPrint(v);

输出结果为:

1 2 3 4 5
1 2 3 4
100 1 2 3 4
10 10 100 1 2 3 4
10 10 100 2 3 4
10 10 100 3 4

六、vector的数据存取

具体的实现接口如下:
at( int idx); 返回索引idx所指的数据
operator[]: 返回索引idx所指的数据
front( ); 返回容器中第一个数据元素
back();返回容器中最后一个数据元素
具体实现样例如下:

	for (int i = 0; i < v.size(); i++){//使用at接口进行输出cout << v.at(i) << " ";//使用索引值进行输出cout << v[i] << " ";//获取第一个元素cout << v.front() << endl;//获取最后一个元素cout << v.back() << endl;}

七、vector互换容器

实现两个容器内元素进行互换。
函数接口如下:
swap(vec); 将vec与本身的元素互换
具体的实现样例如下:


void PrintVector(vector<int> &v)
{for (vector<int>::iterator it = v.begin(); it < v.end(); it++){cout << *it << " ";} cout << endl;
}vector<int> v;vector<int> v1;for (int i = 0; i < 3; i++){v.push_back(i);v1.push_back(i+10);}PrintVector(v);PrintVector(v1);v.swap(v1);PrintVector(v);PrintVector(v1);

以上接口的实用技巧:

	vector<int> v;for (int i = 0; i < 3000; i++){v.push_back(i);} cout << v.capacity() << "容量"<<endl;cout << v.size() << "大小"<<endl;//当我们重置容器的大小之后1v.resize(2);cout << v.capacity() << "容量"<<endl;cout << v.size() << "大小"<<endl;

有以上的代码,代码的输入为:

3597容量
3000大小
3597容量
2大小

我们可以看出,当最先的容器申请了3597大小的容量,但是当我们重置容器大小之后,虽然容器的大小变小了,但是容量并没有变化。这就造成了资源的浪费。我们可以通过以下的操作来收缩容器的容量

vector<int>(v).swap(v);

对以上操作进行解释,vector(v)操作是创建了一个新的对象,该对象为匿名对象,这个匿名对象是按照v的大小来初始化,初始化之后调用swap操作之后将指向v的指针指向了该匿名对象,匿名对象指针指向了v,当匿名对象实用完成之后,编译器会将匿名对象指针指向的内存进行回收。通过这样的一个操作达到了收缩容量的作用。

八、vector的预留空间

该操作可以减少vector在动态扩展容量时的扩展次数,具体的接口说明如下:
reserve(int len); 容器预留len个元素长度。预留位置不初始化,元素不可访问。
具体的实现样例如下:

	vector<int> v;//提前开辟够量的空间v.reserve(199999);int num = 0;int *p = NULL;for (int i = 0; i < 199999; i++){v.push_back(i);if (p != &v[0]){p = &v[0];num++;}}cout << num << endl;
}

当随着容器内需要存放的数据不断的增大,容器需要不断的申请内存空间,这样的操作需要很大的工程,所以为了避免这样重复的操作,所以我们需要实现申请一块已经足够的空间。

http://www.fp688.cn/news/155134.html

相关文章:

  • 网站网页优化怎么做图们网络推广
  • 控制面板网站词语搜索排行
  • 建设网站需要哪些编程网站百度不收录的原因
  • 乐云seo手机网站建设seo营销
  • 找人做的网站第二年多钱电脑培训速成班多少钱
  • 汕头网站外包班级优化大师的功能有哪些
  • 进入淘宝网官网首页 淘宝网站seo推广招聘
  • 网站验证码是如何做的百度权重查询爱站网
  • 合肥网站建设黄页每日新闻摘抄10条
  • 手表网站重庆网站排名推广
  • 如何做网站活动封面济南seo顾问
  • 佛山做外贸网站如何如何做市场调研和分析
  • 苏州网站制作设计网站竞价推广怎么做
  • 黑色网站欣赏关键词排名霸屏代做
  • 自己建设个小网站要什么手续网络推广的方式有哪些
  • 北京工装设计公司排名app排名优化
  • 网站建设公司 武汉怎么seo快速排名
  • 建网站app需要多少钱百度收录情况查询
  • 免费发布的网站百度新闻头条
  • 网络公司网站首页图片广州网络推广公司排名
  • 珠海网站建设策划世界新闻最新消息
  • 深圳网站制作排行榜下载百度浏览器
  • 大型网站建设费用百度推广开户价格
  • 安徽省做网站打开百度浏览器
  • WordPress文章资讯主题网站seo在线诊断分析
  • 原江苏省建设厅网站seo的含义
  • 做二手房网站友情链接获取的途径有哪些
  • wordpress 学院 模板漯河网站seo
  • 寿光网站建设报价博客网站
  • 怎么做购物平台网站简单的网站制作