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

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

接口缩容


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

e5ae1a6feb2f4092a726e17a2859ce27.png



       代码如下:


#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;
    }
}
相关文章
|
30天前
|
存储 C++ 索引
【C++打怪之路Lv9】-- vector
【C++打怪之路Lv9】-- vector
20 1
|
30天前
|
弹性计算 Kubernetes 网络协议
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
|
1月前
|
编译器 C++
【C++】—— vector模拟实现
【C++】—— vector模拟实现
|
1月前
|
算法 C++ 容器
C++之打造my vector篇(下)
C++之打造my vector篇(下)
26 0
|
1月前
|
存储 编译器 C++
C++之打造my vector篇(上)
C++之打造my vector篇(上)
25 0
|
1月前
|
算法 C++ 容器
【C++】—— vector使用
【C++】—— vector使用
|
1月前
|
存储 缓存 C++
C++番外篇——list与vector的比较
C++番外篇——list与vector的比较
21 0
|
1月前
|
C++
C++番外篇——vector的实现
C++番外篇——vector的实现
46 0
|
5天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
23 2
|
15天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。