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

怀化网站优化公司有哪些网站建设优化的作用

怀化网站优化公司有哪些,网站建设优化的作用,wordpress 滑块插件,详情页设计费文章目录 1.vector的介绍和使用1.1vector的介绍1.2 vector的特点1.3vector的使用1.3.1vector的定义1.3.2vector iterator的使用1.3.3vector 的空间增长问题1.3.4 vector 的增删查改1.3.5vector 迭代器失效问题 1.vector的介绍和使用 1.1vector的介绍 vector是一个顺序容器&am…

文章目录

  • 1.vector的介绍和使用
    • 1.1vector的介绍
    • 1.2 vector的特点
    • 1.3vector的使用
      • 1.3.1vector的定义
      • 1.3.2vector iterator的使用
      • 1.3.3vector 的空间增长问题
      • 1.3.4 vector 的增删查改
      • 1.3.5vector 迭代器失效问题

在这里插入图片描述

1.vector的介绍和使用

1.1vector的介绍

vector是一个顺序容器,可以看作是能够动态增长和缩小的数组。与普通的数组不同的是,vector在需要时可以自动调整其大小,以容纳新添加的元素。因此vector在使用上更加的灵活和方便,

1.2 vector的特点

1.动态性:vector能够根据需要动态的调整其空间的大小,这使得vector在处理不确定数量的数据时非常有用。
2.随机访问: 与数组类似,vector支持通过下标进行数据的快速访问,这意味着可以在常数时间内访问vector中的任何元素。
3.尾部操作高效:vector尾部添加或者删除数据时非常高效的,因为这些操作在常数时间内就能完成。

1.3vector的使用

1.3.1vector的定义

构造函数说明接口说明
vector()无参构造
vector(size_type n,const value_type& val = value_type())构造并初始化nvalue
vector(const vector& x)拷贝构造
ector(inputlterator first,inputlterator last)使用迭代器进行初始化构造

代码演示:
1.默认构造函数

std::vector<T> v;

 • 创建一个空的 vector,其元素类型为T
 • 初始时,v的大小为0容量也是未定义的(通常为0,具体取决于实现)

2.指定大小的构造函数

std::vector<T> v(n);

 • 创建一个大小为nvector,其元素被默认构造(即调用T())。
 • 如果T是一个类型,并没有默认构造函数,则会编译报错。

3.指定大小和初始值的构造函数

std::vector<T> v(n,val);

 • 创建一个大小为nvector,并使用val初始化每个元素。
 • 这对需要初始化所有元素为相同值的场景非常有用。

4.范围构造函数

std::vector<T> v(first,last);

 • 创建一个vector,并使用迭代器范围[first,last)内的元素来初始化它。
 • firstlast是输入迭代器,它们指向某种容器(数组、另一个vector等)中的元素。
 • 注意: firstlast是左闭右开的,即包含first指向的元素,但不包括last指向的元素。

5.拷贝构造函数

std::vector<T> v2(v1);

 • 创建一个新的vector,它是现有vector   v1的一个副本。
 • 新vector 将包含与v1 相同数量和顺序的元素。

6.移动构造函数(C++11 及以后)

std::vector<T> v2(std::move(v1));

 • 创建一个新的vector,并通过移动v1 的内容来初始化它。
 • 这通常比拷贝构造函数更加高效,因为它可以避免不必要的复制操作。
 • 然而,v1在移动后将处于未定义状态,通常不再包含有效的数据。

7.初始化列表构造函数(C++11 及以后)

std::vector<T> v1 = {val1,val2,val3,...};

或者

std::vector<T> v1{val1,val2,val3,...};

 • 使用初始化列表来创建并初始化一个vector.
 • 这就允许你直接在构造函数中指定要包含在vector中的元素。

1.3.2vector iterator的使用

iterator的使用接口说明
begin + end获取第一个数据位置的 iterator / const_iterator;获取最后一个数据下一个位置的 iterator / const_iterator
rbegin + rend获取最后一个数据的位置的 reverse_iterator;获取第一个为数据前一个位置的 revesr_iterator

请添加图片描述
请添加图片描述

1.3.3vector 的空间增长问题

接口名称接口说明
size获取数据的个数
capacity获取容量大小
empty判断是否为空
resize改变vectorsize
reserve改变vectorcapacity

1.3.4 vector 的增删查改

vector增删查改接口说明
push_back尾插
popop_back尾删
find查找(这个是算法模块实现,不是vector的接口)
insertpos之前插入数据val
erase删除pos位置的数据
swap交换两个vector的数据空间
operator[]像数组一样访问

代码演示:

#include<iostream>
#include<vector>
using namespace std;int main()
{//创建一个空的vectorvector<int> v;//增加元素v.push_back(10);v.push_back(20);v.insert(v.begin() + 1,15); //在第二个位置插入15// 打印 vector 中的元素cout << "Vector after insertions: ";for (int i = 0; i < v.size(); ++i) {std::cout << v[i] << " ";}cout << endl;// 查找元素auto it = find(v.begin(), v.end(), 20);if (it != v.end()) {cout << "Found 20 at position: " << distance(v.begin(), it) << endl;}else {cout << "20 not found in the vector." << endl;}// 修改元素v[1] = 18; // 将第二个元素修改为 18// 打印修改后的 vector 中的元素cout << "Vector after modification: ";for (int i = 0; i < v.size(); ++i) {cout << v[i] << " ";}cout << endl;// 删除元素(删)v.erase(find(v.begin(), v.end(), 10)); // 删除第一个值为 10 的元素v.pop_back(); // 删除末尾的元素// 打印删除后的 vector 中的元素cout << "Vector after deletions: ";for (int i = 0; i < v.size(); ++i) {cout << v[i] << " ";}cout << endl;return 0;
}

运行这段代码将输出:

在这里插入图片描述

1.3.5vector 迭代器失效问题

迭代器的主要作用就是让算法能够不用关系底层数据结构,其底层实际就是一个类似于指针的东西,或者对指针进行了封装。比如:vector的迭代器就是原生态指针 T*。因此迭代器失效,实际就是迭代器底层对应指针指向的空间被销毁了,而使用一块已经被释放的空间,造成的后果是程序崩溃(即如果继续使用已经失效的迭代器,程序可能会崩溃)。

对于vector可能导致其迭代器失效的操作有:

1.插入操作导致内存重新分配:

  •当向vector中添加元素,且当前容量不足以容纳新的元素时,vector可能会重新分配其内存空间(即分配更大的内存块,并将现有元素复制到新的位置)。这种情况下,所有指向原vector元素的迭代器、指针和引用都会失效。

 •插入操作包括push_backemplace_backinsert等。

2.删除操作:

  •删除元素(使用erase方法)会使指向被删除元素及其之后的元素的迭代器失效。这是因为删除操作会移动后续元素来填补被删除元素的位置。

3.改变vector的大小:

  •使用resize方法改变vector的大小,如果新大小大于当前大小,并导致内存重新分配,那么所有迭代器都会失效。

4.清空vector:

  • 使用clear方法清空vector会使所有的迭代器失效,因为所有元素都被移除了。

如何避免迭代器失效

  • 预留空间: 如果知道将要插入的元素的数量,可以使用reserve方法预先分配足够的空间。这可以减少内存重新分配的可能性,从而避免迭代器失效。

  • 使用返回值: 一些vector成员函数(如inserterase)会返回指向新元素位置或者下一个有效元素的迭代器。使用这些返回值可以避免因操作导致的迭代器失效问题。

  • 重新获取迭代器: 在可能导致迭代器失效的操作后,重新获取迭代器。

示例代码:

#include<iostream>
#include<vector>
using namespace std;int main()
{vector<int> v = {1,2,3,4,5};//获取初始迭代器auto it = v.begin();//插入元素,可能导致迭代器失效v.insert(v.begin(), 0);//使用重新获取的迭代器it = v.begin();//重新获取迭代器cout << "插入后的第一个元素:" << *it << endl;//删除元素,可能导致迭代器失效v.erase(it);//使用erase的返回值it = v.erase(v.begin()); //删除第一个元素,并获取新的迭代器cout << "删除后的第一个元素:" << *it << endl;return 0;
}

总之,使用 vector 时需要特别注意迭代器的有效性,尤其是在进行插入和删除操作时。通过预留空间、使用函数返回值和适时重新获取迭代器,可以有效地管理迭代器的生命周期,避免潜在的失效问题。

http://www.yayakq.cn/news/664679/

相关文章:

  • 培训网站导航专业的外贸行业网站制作
  • 网站建设与网页设计难学吗做公司的网站的需求有哪些
  • 广东白云手机网站建设怎么做网站生意
  • 河北网站建设制作聊城制作手机网站公司
  • 中国风网站设计企业网页制作公司
  • 衡阳网站建设价格模板网站与定制网站的区别
  • 5188站长平台长沙的网站建设
  • 金汇网站建设网站建设phpcms
  • 网站前端浏览器兼容如何做棋牌网站开发
  • 做阿里巴巴小企业网站深圳龙岗网络科技有限公司
  • 个人建设视频网站制作做投票网站的
  • 国际域名注册网站网站建设 推广企业税率
  • 美食网站素材物联网的应用
  • 保定网站制作哪家好建设医疗网站备案前置审批
  • 互联网做视频网站需要许可证吗玄武区网页设计培训
  • 做健康类网站怎么备案给wordpress替换主题
  • 下载教学设计的网站哪个网站卖自己做的手工艺品
  • 织梦网站建设博客网络公司经营范围能写建材吗
  • 本地网站建设的步骤过程有关做服装的网站吗
  • 淘宝客网站模板免费下载免费的小程序模板网站
  • 中国建设银行网站简介郑州做网站公司汉狮网
  • 商会网站建设方案书中国建筑公司官网
  • 营销网站的推广学做网站论坛
  • 建网站需要多少钱石家庄陕西省建设工程质量安全监督总站网站
  • 小米商城网站建设国内十大网站建设
  • 几何背景生成网站研发流程的六个阶段
  • 广州协会网站建设校园网站管理系统
  • 长沙网站建设多少钱教育培训网站建站
  • 吉林网站建设设计免费建设个人网站
  • 网站制作需要多少钱找效果图的网站哪个好