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

【C++】vector容器接口要点的补充

接口缩容

        在VS编译器的模式下,类似于erase和insert接口的函数通常会进行缩容,因此,insert和erase行参中的迭代器可能会失效。下图中以erase为例:

        代码如下:

#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
    vector<int> v = { 1,2,3,4,5,6 };
    vector<int>::iterator it = v.begin();
    while (it != v.end()) //vs做出了调整,不让我们做出访问,因为此时的迭代器已经失效
    {
        if (*it % 2 == 0)
        {
            v.erase(it);
            //正确做法如下,用返回值的形式直接指向新空间中特定的位置
            //it = v.erase(it);

        }
        else
        {
            it++;
        }
    }
    for (auto e : v)
    {
        cout << e << "  ";
    }
    return 0;
}

        总的来说迭代器失效的本质是原本的迭代指向指向的不是数据的位置了。


模板string

        当容器戎装string类时,在使用中要注意string类中构造函数的使用。当容器戎装string使用拷贝或赋值等其它会发生string构造时,一定要注意析构函数会释放掉原有空间内的所有数据的情况

//当模拟实现vector容器接口string类型时的reserve接口的情况
void reserve(size_t n)
{
    if (n > capacity())
    {
        size_t old = size();
        T* tmp = new T[n];
        if (_start)
        {
            //memcpy(tmp, _start, old * sizeof(T));拷贝错误,string内部实现构造函数时将会刷新原有的数据
            for (size_t i = 0; i < old; i++)
            {
                tmp[i] = _start[i];
            }

            delete[] _start;
        }

        _start = tmp;
        _finish = _start + old;
        _endofstorage = _start + n;
    }
}

http://www.lryc.cn/news/284679.html

相关文章:

  • electron-vite中的ipc通信
  • 探秘网络爬虫的基本原理与实例应用
  • 音视频编解码学习记录
  • 零基础小白刚刚入门Python的注意点总结~
  • 从 Context 看 Go 设计模式:接口、封装和并发控制
  • 微信小程序字体大小
  • L1-062 幸运彩票(Java)
  • 【计算机网络】2、传输介质、通信方向、通信方式、交换方式、IP地址表示、子网划分
  • 【Linux 内核源码分析】堆内存管理
  • Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑
  • 模具制造企业ERP系统有哪些?企业怎么选型适配的软件
  • 管理信息系统知识点复习
  • 【Bug】.net6 cap总线+rabbitmq延时消息收不到
  • 在 Python 中检查一个数字是否是同构数
  • 【 Qt 快速上手】-①- Qt 背景介绍与发展前景
  • Kafka-消费者-KafkaConsumer分析-PartitionAssignor
  • 【办公软件篇】软件启动器Lucy打造自己的工具箱
  • C#MQTT编程08--MQTT服务器和客户端(cmd版)
  • 【高等数学之牛莱公式】
  • 基于HFSS的微带线特性阻抗仿真-与基于FDTD的计算电磁学方法对比(Matlab)
  • 【SQL】SQL语法小结
  • Open CASCADE学习|显示模型
  • 【C++】string的基本使用
  • vue 里 props 类型为 Object 时设置 default: () => {} 返回的是 undefined 而不是 {}?
  • 04 SpringMVC响应数据之页面跳转控制+返回JSON数据+返回静态资源
  • Python圣诞主题绘图:用turtle库打造冬日奇妙画面【第31篇—python:圣诞节】
  • [开发语言][c++]:Static关键字和全局变量
  • 计算机组成原理 第一弹
  • Hadoop基础知识
  • Java进阶之旅第五天