# cpp_my_understanding **Repository Path**: btg233/cpp_my_understanding ## Basic Information - **Project Name**: cpp_my_understanding - **Description**: Write down some of my doubts. As I continue to learn, I continue to improve my own understanding - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-04-16 - **Last Updated**: 2023-04-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 顺序容器 ## vector ### 为什么vector不支持头插法 - 1. vector尾插会向后开辟内存空间。如果vector支持向前开辟空间,则添加与删除大概率会使适配器、引用、指针失效 - 2. 向前开辟与向后开辟内存空间都有可能导致内存碎片的问题,但是向前更加严重。vector的预留空间可以更大幅度减少尾插法内存碎片的问题 - 3. vector支持访问头结点,即支持front函数 *设计者可能在避免一些不必要的麻烦,但是目前无法理解为什么不支持这种做法。即使不应该使用,写出这种函数也是必要的。(为什么对goto这么宽容)* ## string ### string的insert函数,不支持str.insert(str.begin(), str2); 如果insert函数支持接受一个字符串对象作为第二个参数的重载版本,那么这个参数将会被解释为一个字符指针或迭代器。 然而,字符串对象和字符指针或迭代器之间存在差异,它们的内部结构和操作方式都不同。字符串对象通常包括一个动态分配的字符数组,而字符指针或迭代器只是指向字符数组的指针或迭代器。 因此,如果insert函数支持接受一个字符串对象作为第二个参数的重载版本,那么它可能需要将字符串对象转换为字符指针或迭代器,以便在内部进行操作。这种转换可能会导致性能损失和内存分配问题。 *花里胡哨* ## reserve和resize ### reserve 用于预分配容器的内存空间,以避免频繁的内存分配和拷贝。并没有真正插入元素到容器中,因此容器的大小并没有改变 ### resize - 1. 如果新的大小小于当前的大小,那么容器会删除多余的元素,使容器的大小与新的大小相等 - 2. 如果新的大小大于当前的大小,那么容器会在末尾添加足够多的默认构造的元素,使容器的大小与新的大小相等 *表示理解,使用场景不一样* # 编写程序 ## 开始程序设计 先列出所需操作,再根据操作写出数据类型 数据类型(如:使用哪几个类,分别有什么功能)先写出最基本的,必须的类,再在这之上考虑抽象,封装部分功能的事情 ## 编写类 先使用类,再编写类 *参照文本查询程序,目前没有上传*