首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

pop_back()是否真的使std :: vector上的*all*迭代器无效?

在C++中,pop_back()函数用于删除std::vector容器中的最后一个元素。当调用pop_back()函数时,它不会影响到指向std::vector中其他元素的迭代器。因此,pop_back()函数并不会使std::vector中的所有迭代器失效。

然而,需要注意的是,如果在调用pop_back()函数之后,std::vector的容量发生了变化,那么指向原始内存位置的迭代器可能会失效。在这种情况下,应该使用std::vectorbegin()end()函数来重新获取有效的迭代器。

总之,pop_back()函数并不会使std::vector中的所有迭代器失效,但是在某些情况下,需要重新获取有效的迭代器。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++ vector 使用详解(含C++20新特性)

& std::erase_if (std::vector)  简介  C++ vector 本质是一个动态数组,它元素是连续存储,这意味着不仅可以通过迭代访问元素,还可以使用指向元素常规指针来对其进行访问...reserve() 不会更改 vector 元素个数,如果 new_cap 大于 capacity(),则所有迭代(包括过去迭代)以及对元素所有引用都将无效。否则,没有迭代或引用无效。 ...使所有引用包含元素引用,指针或迭代无效。 ...(2) 删除范围内元素 [first, last)。  在删除点或删除点之后使迭代和引用无效,包括 end() 迭代迭代 pos 必须有效且可取消引用。...在将大小调整为更小时,vector 容量不会减少,因为这将使所有迭代失效,而是等效于调用 pop_back() 导致迭代失效情况。

1.7K30

【C++】STL 容器 - vector 动态数组容器 ⑧ ( vector 容器添加 删除元素 | clear 函数 | insert 函数 | erase 函数 )

该函数用于删除 vector 容器中最后一个元素 void pop_back(); 2、删除 vector 容器所有元素 - clear 函数 clear 函数 是 std::vector 容器一个成员函数...clear 函数时 , 会删除 std::vector 容器中所有元素 , 并使容器 size 成员变量变为 0 ; 特别注意 : clear 函数 不会改变容器 capacity 容量 ;..., 之前 迭代 指向仍然是被删除元素 , 如果使用之前迭代获取数据 , 程序会崩溃 ; 代码示例 : #include "iostream" using namespace std; #include..., 返回一个指向被删除元素范围结束位置之后迭代 ; 注意 : 返回是 新迭代 , 需要重新使用变量接收该迭代 , 之前 迭代 指向仍然是被删除元素 , 如果使用之前迭代获取数据...指向下一个元素位置迭代 , 新迭代 需要 设置给 循环控制变量 , 代码示例 : #include "iostream" using namespace std; #include "vector

1.1K10

C++初阶:适合新手手撕vector(模拟实现vector

迭代失效意味着该迭代不再指向有效元素或容器结尾,因此继续使用失效迭代可能会导致未定义行为。...迭代失效原因主要有以下几种: 插入操作:当在容器中插入元素时,可能会导致容器内部元素发生移动或重新分配内存,这会导致原先迭代失效。因为插入元素后,原先迭代可能不再指向正确位置。...重新分配内存(扩容时):某些容器在元素数量达到一定阈值时会进行内存重新分配,这会导致原先迭代失效。因为重新分配内存后,原先迭代可能指向了无效内存地址。...这些函数可能会导致容器内部元素发生移动,导致原先迭代指向位置发生变化,从而导致迭代失效。...因此,为了确保迭代有效性,需要将返回迭代赋值给 it,以便在下一次循环中继续使用正确迭代

19310

【Example】C++ 标准库常用容器全面概述

这些容器和数组非常类似,都是在逻辑连续(但内存不一定是连续),与数组不同是,容器可以非常方便动态管理,而不是固定元素大小 std::vector 当你需要容器时,就找vector!...empty 检查vector是否为空。 end 返回指向vector末尾迭代。(非末尾元素) erase 从指定位置删除vector一个元素或一系列元素。...先来看 std::vector 内存逻辑:【Example】C++ Vector 内存预分配良好习惯 std::vector 是始终保持每个元素在连续一块内存,当 pushback 了新元素后...需要注意问题: 迭代非法化:指的是在 std::deque 逻辑连续元素头尾与中间进行插入或删除新元素而导致迭代失效。...emplace_hint 原位插入元素,且尽可能于 hint(迭代) 前面位置。 empty 检查是否为空。 end 返回指向末尾迭代

3.2K30

【C++】STL梳理

数据由容器进行管理,操作则由算法进行,而迭代在两者之间充当粘合剂,使任何算法都可以和任何容器交互运作。...对于容器,主要操作有:容器建立、插入元素、删除元素、查询、遍历、计算元素个数、检查元素是否为空、输出容器包含内容。 0x3 vector 一种序列式容器,事实和数组差不多,但它比数组更优越。...是否为空(返回true时为空) end() : 返回最末元素迭代(译注:实指向最末元素下一个位置) erase() : 删除指定元素 front() : 返回第一个元素 get_allocator...push_back() : 在Vector最后添加一个元素 rbegin() : 返回Vector尾部迭代 rend() : 返回Vector起始迭代 reserve() : 设置Vector..., input_iterator end):迭代构造函数 0x43 常用API back():返回最后一个元素 front():返回第一个元素 insert() pop_back(): 删除尾部元素

66121

C++ Vector

c++ vector 简介 vector 是顺序容器一种,vector 是可变长动态数组(可存放任意类型),支持随机访问迭代。...assign() // 对vector元素赋值 at() // 返回指定元素位置 back() // 返回最后一个元素 begin() // 返回第一个元素迭代 capacity()...// 返回vector所能容纳元素数量(在不重新分配内存情况下) clear() // 清空所有元素 empty() // 判断vector是否为空(空返回true) end() // 返回最末元素迭代...最后添加一个元素 rbegin() // 返回vector尾部迭代 rend() // 返回vector起始迭代 reserve() // 设置vector最小元素容纳数量 resize...起始位置迭代 - 案例 ```c #include #include using namespace std; int main

1.7K97

C++初阶:容器(Containers)vector常用接口详解

这个构造函数使用迭代范围[first, last) 中元素来初始化 std::vector。这使得您可以使用另一个容器一部分或全部元素来初始化 std::vector。...这个构造函数创建一个新 std::vector,并使用另一个 std::vector x 中元素进行初始化 构造函数声明 接口说明 vector()(重点) 无参构造 vector(size_type...即 ++ 操作符会使迭代向前移动,而 -- 操作符会使迭代向后移动) rend 获取第一个数据前一个位置reverse_iterator 4.vector三种遍历 4.1正常for循环 void...获取容量大小 empty 判断是否为空 resize 改变vectorsize reserve 改变vectorcapacity capacity代码在vs和g++下分别运行会发现,vs下capacity...& x); 参数说明:x 是另一个 vector 作用:交换两个 vector 数据空间,使它们内容互相交换 void test9() { vector v1; for (int i

11510

C++ STL它vector详细解释

() 推断Vector是否为空(返回true时为空) end() 返回最末元素迭代(译注:实指向最末元素下一个位置) erase() 删除指定元素 front() 返回第一个元素...() 移除最后一个元素 push_back() 在Vector最后加入一个元素 rbegin() 返回Vector尾部迭代 rend() 返回Vector起始迭代 reserve...构造一个初始放入num个值为val元素Vector vector(from) – 构造一个与vector from 同样vector 迭代(start)和迭代(end) – 构造一个初始值为...起始元素迭代.比如,以下这段使用了一个迭代来显示出vector全部元素: vector v1( 5, 789 ); vector::iterator it; for(...末尾元素下一位置迭代.注意,假设你要訪问末尾元素,须要先将此迭代自减1.

36720

C++从入门到精通(第七篇) :vector深度剖析及模拟实现

through second std::vector fourth (third); // a copy of third // 下面涉及迭代初始化部分,我们学习完迭代再来看这部分 /...(重点) 迭代主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针,或者是对指针进行了 封装,比如:vector迭代就是原生态指针T*。...因此迭代失效,实际就是迭代底层对应指针所指向 空间被销毁了,而使用一块已经被释放空间,造成后果是程序崩溃(即如果继续使用已经失效迭代, 程序可能会崩溃)。...对于vector可能会导致其迭代失效操作有: 会引起其底层空间改变操作,都有可能是迭代失效,比如:resize、reserve、insert、assign、 push_back等 #include...,理论迭代 不应该会失效,但是:如果pos刚好是最后一个元素,删完之后pos刚好是end位置,而end位置是 没有元素,那么pos就失效了。

49420

【C++】vector底层剖析以及模拟实现

iterator _endOfStorage; // 指向存储容量尾 } 以及正向迭代,不可修改迭代,各种构造函数,析构函数, reserve(预开辟出空间,字符串还是原来大小...(一般不缩容)),resize(将vector设定为指定大小,字符串占满所开辟空间),push_back(尾插),pop_back(尾删),insert(在pos位置插入x,并返回pos位置地址)...,erase(删除pos位置元素,并返回该位置地址)。...注意事项:迭代失效  以reserve为例,当reserve开辟新空间时会释放原来旧空间,导致_start,_finish都不是原来_start,_finish,如果此时贸然对_start,_finish...public: // Vector迭代是一个原生指针 typedef const T* const_iterator; iterator

13810

std::vector初始化

#include #include #include using namespace std; int main() { std::vector...it,int n,const T& x):向量中迭代指向元素前增加n个相同元素x iterator insert(iterator it,const_iterator first,const_iterator...last):向量中迭代指向元素前插入另一个相同类型向量[first,last)间数据 3.删除函数 iterator erase(iterator it):删除向量中迭代指向元素 iterator...begin():返回向量头指针,指向第一个元素 iterator end():返回向量尾指针,指向向量最后一个元素下一个位置 reverse_iterator rbegin():反向迭代,指向最后一个元素...reverse_iterator rend():反向迭代,指向第一个元素之前位置 5.判断函数 bool empty() const:判断向量是否为空,若为空,则向量中无元素 6.大小函数

70330

vector介绍与使用【C++】

vector 空间增长问题 vector 增删查改 vector 迭代失效问题 引起底层空间改变 erase g++与vs检测比较 string迭代失效 vector 在OJ中使用 只出现一次数字...使用vector时,需要包含头文件,并通过std命名空间访问。vector还提供了许多成员函数,如push_back()、pop_back()、size()等,以支持各种操作。...,理论迭代不应该会失效,但是:如果pos刚好是最后一个元素,删完之后pos刚好是end位置,而end位置是没有元素,那么pos就失效了。...,删除之后it已经超过end // 此时迭代无效,++it导致程序崩溃 int main() { vector v{1,2,3,4,5}; // vector v{1,2,3,4,5,6...,会导致初始化迭代区间[first,last)只能是vector迭代 // 重新声明迭代迭代区间[first,last)可以是任意容器迭代 template<class InputIterator

6210

list类

与其他序列式容器相比,list和forward_list最大缺陷是不支持任意位置随机访问,比如:要访问list第6个元素,必须从已知位置(比如头部或者尾部)迭代到该位置,在这段位置迭代需要线性时间开销...1.2.6 list迭代失效 迭代失效即迭代所指向节点无效,即该节点被删除了。...原生态指针,比如:vector 2. 将原生态指针进行封装,因迭代使用形式与指针完全相同,因此,在自定义类中必须实现以下方 法: 1....迭代需要进行是否相等比较,因此还需要重载operator==()与operator!..._pNode; } PNode _pNode; }; /* List 反向迭代,反向迭代与正向迭代刚好是相反,反向迭代++,迭代往前移动,反向迭代 --, 迭代往后移动

91920

从零开始学C++之STL(三):迭代vector::iterator 和 vector::reverse_iterator 实现、迭代类型、常用容器成员

一、迭代 迭代是泛型指针 普通指针可以指向内存中一个地址 迭代可以指向容器中一个位置 STL每一个容器类模版中,都定义了一组对应迭代类。...例如,对于需要输入迭代算法,可传递前向、双向或随机访问迭代调用该算法。而反之则不行。注意:向算法传递无效迭代类别所引起错误,无法保证会在编译时被捕获到。...map, set, list类型提供双向迭代,而string, vector和deque容器定义迭代都是随机访问迭代,用作访问内置数组元素指针也是随机访问迭代。...因此,在处理算法时,最好将关联容器迭代视为支持自减运算输入迭代,而不是完整双向迭代。...3、当进行删除操作(erase,pop_back)后,指向删除点迭代全部失效;指向删除点后面的元素迭代也将全部失效。

2K00

C++ vector用法详解

Description begin 返回指向迭代第一个元素指针 end 返回指向迭代最后一个元素指针 rbegin 返回迭代逆序第一个元素指针 rend 返回迭代逆序最后一个元素指针 cbegin...返回常量迭代第一个元素指针 cend 返回常量迭代最第一个元素指针 crbegin 返回常量迭代逆序第一个元素指针 crend 返回常量迭代逆序最后一个元素指针 Capacity...vector中总共可以容纳元素个数 empty 测试vector是否是空 reserve 控制vector预留空间 shrink_to_fit 减少capacity到size大小 Element...vector中有三种可以删除元素操作,第一种就是我们上面讲到pop_back,删除最后一个元素,无返回值;第二种是clear,将容器清空,size变为0,无返回值;第三种是erase,通过迭代来删除元素...,可以删除一个元素,也可以删除某个范围内元素,返回下一个位置迭代

6K20
领券