C/C++
未读stack(c++)<stack> 是 C++ 标准库中的一个容器适配器,提供了一个后进先出 (LIFO) 栈的实现。 1. 引入头文件1#include <stack> 2. 声明与初始化12stack<int> s; // 创建一个存储 int 类型的栈stack<string> ss; // 创建一个存储 string 类型的栈 3. 常用方法 方法/成员 作用 复杂度 示例代码 push(val) 将元素 val 添加到栈顶 O(1) s.push(10); pop() 移除栈顶元素 O(1) s.pop(); top() 返回栈顶元素的引用,但不移除 O(1) int topElem = s.top(); empty() 判断栈是否为空,返回 true 或 false O(1) if (s.empty()) { /* do something */ } size() 返回栈中元素的个数 O(1) cout << s.size(); sw ...
prim1234567891011121314151617181920212223242526272829303132333435363738394041424344454647#include<iostream>#define max_number 9999using namespace std;typedef struct Graph { int vexsnums;// 表示顶点的个数 int arcsnums;// 表示边的个数 int arcs[20][20];// 边的信息 char vexs[20];// 顶点的信息};typedef struct CloseEdge { // 定义一个辅助的数组 char vexs;// 记录顶点 int weight;// 记录这个顶点到这个已经有的树的最小距离};CloseEdge* InitCloseEdge(Graph* G, int indexnumber) { // 初始化这个距离prim树最小距离 CloseEdge* closeedge = new CloseE ...
C/C++
未读string(c++)一.字符串方法1. 构造函数 string()创建一个空字符串。 string(const string& str)复制构造函数,复制另一个字符串。 string(string&& str)移动构造函数,移动一个临时字符串。 string(const char\* s)从 C 风格字符串创建一个字符串。 string(size_t n, char c)创建一个包含 n 个字符 c 的字符串。 2. 赋值操作符 string& operator=(const string& str)将另一个字符串的内容赋值给当前字符串。 string& operator=(string&& str)将另一个字符串的内容移动到当前字符串。 string& operator=(const char\* s)将 C 风格字符串 s 赋值给当前字符串。 3. 访问字符 char& operator[](size_t pos)通过下标访问字符(没有范围检查)。 const char& operator ...
pair(c++)1. 基本概念什么是 std::pair?std::pair 是一个 模板类,专门用来存储两个数据项(first 和 second),这些数据项可以是相同类型,也可以是不同类型。 2. pair 的底层设计模板声明pair 的模板声明如下: 123456789101112131415161718192021222324252627282930template<class T1, class T2>struct pair { T1 first; // 第一个元素 T2 second; // 第二个元素 // 构造函数 constexpr pair(); constexpr pair(const T1& a, const T2& b); template<class U1, class U2> constexpr pair(U1&& a, U2&& b); // 拷贝和移动构造 constexpr pair(const pair&am ...
C/C++
未读vector(c++)一、概述1. vector的作用vector 是 C++ STL 提供的一个动态数组容器。它不仅能像普通数组一样存储和访问数据,还支持动态扩展、插入和删除操作,同时保持元素的连续存储,方便使用指针操作。 2. vector的优缺点优点: 动态扩展:能够根据需要自动调整大小,无需手动管理内存。 连续存储:提供数组级别的性能,支持随机访问(O(1) 时间复杂度)。 多样接口:封装了丰富的操作方法,例如插入、删除、排序等。 缺点: 扩容开销:当容量不足时,vector 会重新分配更大的内存并复制原有数据,效率降低。 非尾部操作效率低:在中间插入或删除元素需要移动大量数据。 二、底层实现原理1. 内存管理 vector 使用动态数组存储数据。 每当元素数量超过当前容量时,会触发扩容。扩容通常以原来容量的 2 倍 为单位进行。 扩容流程: 分配一块更大的内存。 将原有数据复制到新内存中。 释放旧内存。 2. 扩容性能分析 触发扩容:当 size 达到 capacity 时。 扩容成本:触发扩容时,所有元素都会被复制到新内存,时间复杂度为 O(n)O(n)O(n) ...
set(c++)在C++中,set 是一个标准库容器,属于 std 命名空间,通常用于存储唯一的元素,并自动按照升序或自定义的顺序排序。它的底层实现通常基于红黑树(或类似的平衡二叉树)。set 中的元素是唯一的,并且不允许修改(即元素不可重复插入和修改)。以下是常用的 set 方法及其详细解释: 1. insert()insert() 用于向 set 中插入元素。如果元素已经存在,insert() 不会插入新元素,并且返回一个指示插入结果的对(iterator, bool)。 1234std::set<int> mySet;mySet.insert(10);mySet.insert(20);mySet.insert(10); // 插入失败,因为 10 已经存在 2. erase()erase() 用于删除一个指定的元素。它可以接受一个元素值或一个迭代器作为参数。 通过元素删除:删除指定的元素。 通过迭代器删除:删除指定位置的元素。 1234std::set<int> mySet = {10, 20, 30};mySet.erase(2 ...
C/C++
未读unordered_map(c++)std::unordered_map 是 C++ 标准库中提供的一个哈希表容器,具有快速的查找、插入和删除操作。它存储键值对,并且支持基于哈希函数的快速查找,适合用于不需要顺序访问的场景。 常用方法及其详细讲解:1. insert 功能: 向 unordered_map 中插入一个新的键值对。 语法: 12unordered_map[key] = value; // 直接插入unordered_map.insert({key, value}); // 另一种插入方式 返回值: 如果使用 insert,它会返回一个 pair<iterator, bool>,其中 iterator 指向插入的元素,bool 表示插入是否成功(如果键已存在则为 false)。 示例: 123std::unordered_map<int, std::string> umap;umap.insert({1, "apple"});umap[2] = "banana" ...
C/C++
未读unordered_set(c++)unordered_set 是 C++ 标准库中的一个容器,属于 std 命名空间,和 set 类似,但与 set 不同的是,unordered_set 中的元素没有任何排序。unordered_set 的底层实现基于哈希表,因此它能够提供常数时间复杂度的插入、删除和查找操作(在最坏情况下为线性时间复杂度)。不过,由于没有排序,元素的遍历顺序是无序的。 1. insert()insert() 用于向 unordered_set 中插入一个元素。如果元素已经存在,insert() 不会插入新元素,并且返回一个指示插入结果的对(iterator, bool)。如果插入成功,返回的布尔值为 true;如果元素已经存在,返回 false。 1234std::unordered_set<int> mySet;mySet.insert(10);mySet.insert(20);mySet.insert(10); // 插入失败,因为 10 已经存在 2. erase()erase() 用于删除 unordered_set 中的元素。它可以接受元素值 ...
算法-二分查找详解[多语言实现]二分查找(Binary Search)是一种高效的查找算法,常用于有序数组或序列。根据循环条件和区间定义的不同,二分查找可以有多种写法,主要包括以下四种: 1. 闭区间 [left,right]搜索区间是闭区间 [left, right] 代码模板:c++: 1234567891011121314151617int binary_serach(vector<int>& nums, int target) { int left = 0; int right = nums.size() - 1; // 定义闭区间 [left, right] while (left <= right) { // 区间不为空时继续查找 int middle = left + (right - left) / 2; if (nums[middle] == target) { return middle; } else if (nums[middle] < target) { le ...
Go开始1234567package mainimport "fmt"func main() { fmt.Println("hello world")} 123456789101112要运行这个程序,先将将代码放到名为 hello-world.go 的文件中,然后执行 go run$ go run hello-world.gohello world如果我们想将程序编译成二进制文件(Windows 平台是 .exe 可执行文件), 可以通过 go build 来达到目的。$ go build hello-world.go$ lshello-world hello-world.go然后我们可以直接运行这个二进制文件。$ ./hello-worldhello world 变量123456789101112131415161718192021package mainimport "fmt"func main() { // var 声明 1 个或者多个变量。 var a = " ...