首页 > 编程语言 >【C++ Allocator】 详解C++的空间配置器和vector的底层实现以及push_back()和empalce_back()的区别

【C++ Allocator】 详解C++的空间配置器和vector的底层实现以及push_back()和empalce_back()的区别

时间:2024-08-14 12:57:49浏览次数:16  
标签:std 容器 元素 back C++ vector 内存 构造

空间配置器

用于管理动态内存分配和释放,STL 容器类(如 std::vector, std::list, std::map 等)都使用配置器来管理内存。它有非常重要的特点:

  • 将容器的内存开辟对象构造分离开
  • 将容器的对象析构内存释放分离开

这样能够高效的插入元素以及删除元素

vector

STL中典型的容器vector采用标准空间配置器进行初始化容器,对象在元素中的构造,元素的析构,以及容器内存的释放,运用了模板、定位new等技术

代码实现,ps:建议自己手敲两遍, 加深自己对模板、new、malloc、free、指针、拷贝构造以及赋值运算符重载函数的理解,个人认为这是非常好的代码示例的学习,运用了多个技术

#include <iostream>

template<typename T>
class Allocator
{
public:
    // 没有实现构造(不需要),自动采用默认构造

    // 内存开辟 
    T* al

标签:std,容器,元素,back,C++,vector,内存,构造
From: https://blog.csdn.net/m0_71124168/article/details/141131587

相关文章

  • C++赋值运算符
    赋值运算符 = 用于将一个值赋给一个变量。对于自定义类型,如类和结构体,你可以重载赋值运算符以定义如何将一个对象的值赋给另一个对象。默认赋值运算符对于类类型,默认的赋值运算符会执行成员逐一赋值(member-wisecopy)。这意味着对于两个对象a和b,表达式a=b;将每个成员从b复制......
  • C++关键字static
    1.静态成员变量:当static关键字用于类的成员变量时,意味着这个变量是类的所有实例共享的。无论类实例有多少个,静态成员变量只有一个副本。静态成员变量经常用于存储类的公共数据,如配置选项或计数器。classMyClass{public:staticintcount;//静态成员变量};intMyCl......
  • 彼岸花开C++,类和对象(下)
    目录对类和对象的深层理解(1)再谈构造函数(2)Static成员(3)友元(4)内部类(5)匿名对象(6)再次理解类和对象对类和对象的深层理解(1)再谈构造函数1.构造函数体赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。classDate{public:Date(int......
  • C++-练习-16
    题目:编写一个程序,它要求用户输入其名,然后输入其姓。然后程序使用一个逗号和空格将姓和名组合起来,并存储和显示结果。请使用char数组和头文件cstring(string.h)中的函数。源代码:#define_CRT_SECURE_NO_WARNINGS //vs版本不加这个无法使用strcat等函数#include<iostream>#......
  • C++-练习-17
    题目:结构CandyBar包含3个成员,第一个成员存储了糖块的品牌;第二个成员存储糖块的重量(可以有小数);第三个成员存储了糖块的卡路里含量(整数)。请编写一个程序,要声明这个结构,创建一个名为sncak的CandyBar变量,并将其成员分别初始化为“MochaMunch”,2.3和350。初始化应在声明snack时进......
  • 虚化引擎 C++基础 2 C++游戏架构,创建默认的c++类
    游戏模式一、游戏模式重载(GameModeOverride):设置游戏的基础玩法,包含玩家数量,关卡过度,玩家进入游戏方式等。二、默认Pawn类(DefaultPawnClass):玩家的默认角色,可以是带有复杂运动系统的character也可以是简单运动的Pawn。########Pawn和Character的区别:Pawn和Character的区别:P......
  • c++ 线程函数传递数据 namespace
     CMakeLists.txt cmake_minimum_required(VERSION3.10)#Settheprojectnameproject(GlobalMatrixExample)#FindEigenpackagefind_package(Eigen33.3REQUIRED)#Findpthreadpackagefind_package(ThreadsREQUIRED)#Addexecutableadd_executable(g......
  • 【C++】类与对象(中)_7.const成员函数
    7.const成员7.1const修饰类的成员函数将const修饰的类成员函数称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。我们来看看下面的代码#define_CRT_SECURE_NO_WARNINGS1#include<iostream>......
  • 虚幻引擎5 C++基础 C++各类宏的作用
    1.GENERATED_BODY()//自动生成的宏,不直接使用父类的构造函数,如果需要做初始化操作,需要在自己的.h头文件中声明构造函数。在Cpp文件中实现,同时是private。//GENERATED_UCLASS_BODY(),使用父类的构造函数,进行初始化操作不需要.h文件中声明,可以直接在CPP文件中实现构造函数。//UPROP......
  • C++ 适配器 stack
    不了解适配器的读者可以先去看一看这一篇博客:C++适配器-CSDN博客栈数据结构介绍我们平时洗碗的时候,叠成一层层的碗最后只能从上面往下面开始拿;平时箱子里面叠的衣服,也是只能从上面慢慢拿。先放进去的东西后拿出来,这种内存特点的数据结构就叫栈。就像一个只有单边口的容器......