- 博客(29)
- 问答 (2)
- 收藏
- 关注
原创 C++ vector容器
resize和reserve函数本质都涉及了vector的内存存储空间,因为vector在内存中是连续存放的,所以当resize的空间大于现有的存储空间(capacity() 函数 返回当前vector在重新进行内存分配以前所能容纳的元素数量.)时,会重新选择更大的空间,并将所有元素复制过去。resize在初始化内存容量时有对值的初始化,所以。其底层实际就是一个指针,或者是对指针进行了封装因此迭代器失效,实际就是迭代器底层对应指针所指向的空间被销毁了,而使用一块已经被释放的空间,造成的后果是程序崩溃。
2023-07-28 12:03:06
248
原创 智能指针学习——共享指针
class Girl;public :Boy() {cout << "Boy 构造函数" << endl;cout << "~Boy 析构函数" << endl;public :Girl() {cout << "Girl 构造函数" << endl;cout << "~Girl 析构函数" << endl;// 陷阱用法 spBoy -> setGirlFriend(spGirl);// 此时boy和girl的引用计数都是2 } int main(void) {
2023-06-14 20:07:57
84
原创 数据结构——顺序队列
顺序队列特性:允许插入的一端叫队尾,O(1)允许删除的一端叫队头,O(n)如果把顺序队列设计成循环队列,可以把删除操作变为O(1)先进先出,后进后出结构体typedef struct SqQueue{ int front;//队头 int rear;//队尾下标,同“栈”的"top"指针,指向当前可以存放的结点 int *base; int queue_size;//如果要扩容,则需要加入这个成员}SqQueue,*PSqQueue;初始化void InitQueue(PSq
2022-05-23 20:33:34
55
原创 数据结构——双向链表
一.双向链表的操作文章目录结构体初始化头插尾插在pos位置插入val判空获取结点个数在DList中查找第一个key值,找到了返回地址,没有找到返回NULL删除第一个val的值返回key的前驱地址,如果不存在返回NULL返回key的后继地址,如果不存在返回NULL输出删除pos位置的数据销毁结构体typedef struct DNode{ int data; DNode *next; DNode *prior;}DNode,*DList;初始化void InitList(DLis
2022-05-23 18:58:01
101
原创 静态链表的实现
静态链表特性:静态链表利用顺序表模拟链表静态链表包含两条链表,一条为有效数据链表,一条为空闲节点链表有效数据链表为带头结点的循环链表,且头结点在0号下标空闲结点链表为带头结点的的循环链表,且头结点在1号下标ps[1]相当于空闲链表的表头ps[0]相当于有效链表的表头初始化void InitList(SNode* ps)//初始化{ assert(ps != NULL); if (ps == NULL) { return; } ps[0].next = 0; for (in
2022-05-14 13:48:58
342
原创 数据结构——单链表
数据结构一.单链表基本操作初始化void InitList(LinkList plist)//初始化{ assert(plist != NULL); plist->next = NULL;}头插法bool Insertplist(LinkList plist,int val)//头插{ assert(plist != NULL); //申请结点 LinkNode* p = (LinkNode*)malloc(sizeof(LinkNode)); assert(p != N
2022-04-25 20:16:10
679
原创 数据结构——定长顺序表
数据结构一.顺序表1.定长顺序表分为‘数组’和‘顺序表’两种。#pragma once//预防头文件被重复引用,若被重复引用则自动忽略定义 定长顺序表结构体#pragma once//typedef struct SQList //定长顺序表{ int length; int elem[10];}SQList, * PSQList;初始化void InitSqlist(PSQList ps)//初始化{ assert(ps!= NULL); ps->length
2022-04-16 19:22:58
449
原创 C语言——二维数组的学习
C语言——二维数组的学习1.1二维数组的定义int arr[2][3] = { {1,2,3},{4,5,6} };//定义一个两行三列的二维数组int arr1[2][3];//跟第一行意义一样,只不过数组里面存放的都是随机数int brr[2][3] = { {1,2},{3} };//其他地方会填充数字‘0’//输出:// 1 2 0// 3 0 0int crr[3][4] = { 1,2,3,4,5,6,7,8,9 };//行优先:先把第一行填充满,再填充第二行,不够的位置用 ‘0
2021-12-12 22:37:16
1155
2
原创 输入字符串“i am a student”将‘空格’替换成两个#
输入字符串“i am a student”将‘空格’替换成两个#思路:利用for循环遍历数组每一个元素,当遍历到空格时候,将元素从最后面再到最前面向后移一个单位,即“str[j+1] = str[j]”,然后将str[i]和str[i+1]都赋值‘#’。代码:#define _CRT_SECURE_NO_WARNINGS#include<stdlib.h>#include <string.h>#include<stdio.h>#include <io
2021-12-09 22:06:58
909
原创 C语言——指针的学习
**C语言——指针的学习一、指针的概念1.1指针的定义变量存放在内存中,而内存其实就是一组有序字节组成的数组,每个字节有唯一的内存地址。CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行定位。这里,数据对象是指存储在内存中的一个指定数据类型的数值或字符串,它们都有一个自己的地址,而指针便是保存这个地址的变量。也就是说:指针是一种保存变量地址的变量。1.2为何使用指针1)指针的使用使得不同区域的代码可以轻易的共享内存数据,这样可以使程序更为快速高效;2)C语言中一些复杂的数据结构往往
2021-12-09 21:45:47
956
空空如也
请问为什么被remove后不应该是把3排到最后面吗?
2024-02-06
问一下为什么QT没有被定义啊
2023-06-06
C++ 把读取到的第一个单词放最后面
2023-03-24
c++报错Student was not declared in this scope?
2021-03-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人