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

自行建造网站软件开发培训机构哪家好

自行建造网站,软件开发培训机构哪家好,dw网页制作成品下载,宁波企业seo服务文章目录 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())构造并初始化n个valuevector(const vector x)拷贝构造ector(inputlterator first,inputlterator last)使用迭代器进行初始化构造 代码演示 1.默认构造函数 std::vectorT v;• 创建一个空的 vector其元素类型为T。  • 初始时v的大小为0容量也是未定义的通常为0具体取决于实现 2.指定大小的构造函数 std::vectorT v(n);• 创建一个大小为n的vector,其元素被默认构造即调用T。  • 如果T是一个类型并没有默认构造函数则会编译报错。 3.指定大小和初始值的构造函数 std::vectorT v(n,val);• 创建一个大小为n的vector,并使用val初始化每个元素。  • 这对需要初始化所有元素为相同值的场景非常有用。 4.范围构造函数 std::vectorT v(first,last);• 创建一个vector,并使用迭代器范围[first,last)内的元素来初始化它。  • first和last是输入迭代器它们指向某种容器数组、另一个vector等中的元素。  • 注意 first和last是左闭右开的即包含first指向的元素但不包括last指向的元素。 5.拷贝构造函数 std::vectorT v2(v1);• 创建一个新的vector,它是现有vector   v1的一个副本。  • 新vector 将包含与v1 相同数量和顺序的元素。 6.移动构造函数C11 及以后 std::vectorT v2(std::move(v1));• 创建一个新的vector,并通过移动v1 的内容来初始化它。  • 这通常比拷贝构造函数更加高效因为它可以避免不必要的复制操作。  • 然而v1在移动后将处于未定义状态通常不再包含有效的数据。 7.初始化列表构造函数C11 及以后 std::vectorT v1 {val1,val2,val3,...};或者 std::vectorT v1{val1,val2,val3,...};• 使用初始化列表来创建并初始化一个vector.  • 这就允许你直接在构造函数中指定要包含在vector中的元素。 1.3.2vector iterator的使用 iterator的使用接口说明begin end获取第一个数据位置的 iterator / const_iterator;获取最后一个数据下一个位置的 iterator / const_iteratorrbegin rend获取最后一个数据的位置的 reverse_iterator;获取第一个为数据前一个位置的 revesr_iterator 1.3.3vector 的空间增长问题 接口名称接口说明size获取数据的个数capacity获取容量大小empty判断是否为空resize改变vector的sizereserve改变vector的capacity 1.3.4 vector 的增删查改 vector增删查改接口说明push_back尾插popop_back尾删find查找这个是算法模块实现不是vector的接口insert在pos之前插入数据valerase删除pos位置的数据swap交换两个vector的数据空间operator[]像数组一样访问 代码演示 #includeiostream #includevector using namespace std;int main() {//创建一个空的vectorvectorint 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_back、emplace_back、insert等。 2.删除操作 •删除元素使用erase方法会使指向被删除元素及其之后的元素的迭代器失效。这是因为删除操作会移动后续元素来填补被删除元素的位置。 3.改变vector的大小 •使用resize方法改变vector的大小如果新大小大于当前大小并导致内存重新分配那么所有迭代器都会失效。 4.清空vector: • 使用clear方法清空vector会使所有的迭代器失效因为所有元素都被移除了。 如何避免迭代器失效 • 预留空间 如果知道将要插入的元素的数量可以使用reserve方法预先分配足够的空间。这可以减少内存重新分配的可能性从而避免迭代器失效。 • 使用返回值 一些vector成员函数如insert和erase会返回指向新元素位置或者下一个有效元素的迭代器。使用这些返回值可以避免因操作导致的迭代器失效问题。 • 重新获取迭代器 在可能导致迭代器失效的操作后重新获取迭代器。 示例代码 #includeiostream #includevector using namespace std;int main() {vectorint 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.hkea.cn/news/14477686/

相关文章:

  • 济南高新区 网站建设公司临海手机网站设计
  • 网站建设 杭州市萧山区网站设计机构排名
  • 贷款网站开发24小时学会网站建设下载
  • 动漫一级a做爰片免费网站招商网官网
  • 南昌建筑行业网站开发青岛专业网站建设公司排名
  • 网站建设费用什么意思现在还有网站做校内网吗
  • 游学旅行网站建设策划书网络营销和电子商务的区别和联系
  • 做电影免费ppt模板下载网站郑州建网站价格
  • 网站开发的公司wordpress基于什么语言
  • 常州专业网站建设公司哪家好南昌做网站的流程
  • 招工做的网站wordpress加载更多
  • 支部网站建设深圳建设交易工程服务网
  • 北京免费网站建设模板微信商城建设
  • 网站开发一般要用到哪些软件wordpress页脚设置
  • 大学网站建设方案宁波外包seo公司
  • 网站开发量计算平面设计考研科目
  • 公司网站简历刷新怎么做php网站开发数据列表排重
  • 做视频网站服务器logo制作软件
  • 昆明设计网站wordpress怎么实现会员登录
  • 淘客怎么做自己的网站h5开发用什么工具
  • 新津县建设局网站51做网站
  • 如何做枪版电影网站用表格做网站教程
  • 做招聘网站需要什么快速搭建小程序
  • 建筑模板的价格一览表邢台做网站建设优化制作公司金信一条龙
  • 做网站如何放入图像免费seo关键词优化服务
  • 忘记网站后台登陆地址网站建设vi设计
  • 做企业网站可以没有后台吗搜索引擎排名优化价格
  • 网站后台软件可以自己做吗logo制作规范
  • 网站建网站建站专业公司单页网站怎么做seo
  • 海口企业网站开发树莓派用wordpress