【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;
    }
}
相关文章
|
5天前
|
存储 C++ 索引
【C++打怪之路Lv9】-- vector
【C++打怪之路Lv9】-- vector
13 1
|
5天前
|
弹性计算 Kubernetes 网络协议
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
|
15天前
|
编译器 C++
【C++】—— vector模拟实现
【C++】—— vector模拟实现
|
10天前
|
算法 C++ 容器
C++之打造my vector篇(下)
C++之打造my vector篇(下)
19 0
|
10天前
|
存储 编译器 C++
C++之打造my vector篇(上)
C++之打造my vector篇(上)
20 0
|
15天前
|
算法 C++ 容器
【C++】—— vector使用
【C++】—— vector使用
|
17天前
|
存储 缓存 C++
C++番外篇——list与vector的比较
C++番外篇——list与vector的比较
18 0
|
17天前
|
C++
C++番外篇——vector的实现
C++番外篇——vector的实现
42 0
|
2天前
|
存储 Docker 容器
docker中挂载数据卷到容器
【10月更文挑战第12天】
13 5
|
7天前
|
存储 运维 云计算
探索Docker容器化:从入门到实践
在这个快速发展的云计算时代,Docker容器化技术正在改变应用的开发、部署和管理方式。本文旨在为初学者提供一个关于Docker的全面入门指南,并通过实践案例展示Docker在实际开发中的应用。我们将一起了解Docker的核心概念、基本操作、网络和存储,以及如何构建和部署一个简单的Web应用。无论你是开发者还是运维人员,本文都会帮助你快速掌握Docker的核心技能。