【C++笔记】

C++ stoi函数,字符串转整数 通过调用stoi函数将字符串转换为整数。第一个示例将字符串"12345"转换为整数12345,第二个示例将字符串"1010"按二进制转换为整数10。第三个示例中,由于字符串"123abc"中包含无效字符"a",转换结束的位置为3,所以只将前面的数字"123"转换为整数123。- idx:可选参数,用于存储转换结束的位置,即第一个无效字符的位置。stoi函数是C++标准库中的一个函数,用于将字符串转换为整数。- base:可选参数,指定转换时使用的进制,默认为10进制。- str:要转换的字符串。 阅读详情

哈希表

unordered_set

教程原文

unordered_map

教程原文
unordered_map 就是一个键值对,一个key对应一个value,map[key] = value
访问它的内容,也可以通过查询出来的 iterator->first , iterator->second这样的来访问

迭代器

教程原文

pair的用法

博客原文
pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。
其标准库类型–pair类型定义在#include 头文件中,定义如下:
类模板:template<class T1,class T2> struct pair
参数:T1是第一个值的数据类型,T2是第二个值的数据类型。
功能:pair将一对值(T1和T2)组合成一个值,
这一对值可以具有不同的数据类型(T1和T2),
两个值可以分别用pair的两个公有函数first和second访问。

无参数的构造函数

对于没有参数的构造函数,在创建类的时候,要用:

ClassName obj{};
或者
ClassName obj;

printf 和sprintf

在这里插入图片描述

    int a=12;
    printf("八进制  %o\n",a);
    printf("十六进制 %x\n",a);
    printf("十进制 %d\n",a);
    
    char* date = new char[9];
    int sub = 999145;
    sprintf(date,"%X", sub);//转为十六进制字符串,大写
    sprintf(date,"%x", sub);//转为十六进制字符串,小写
    sprintf(date,"%o", sub);//转为八进制字符串
    sprintf(date,"%d", sub);//转为十进制字符串

整数转为二进制字符串

    int n = 10;
    string s;
    for(int i =31; i>=0; i--){
        s += to_string((n>>i) & 1);
    }
    cout<<s<<endl;

C++字符串转其他类型

其他转string

std::to_string(int)
std::to_string(long)
std::to_string(long long)
std::to_string(float)
std::to_string(double)
std::to_string(long double)

字符串转整形

stoi()

int stoi (const string&  str, size_t* idx = 0, int base = 10);
int stoi (const wstring& str, size_t* idx = 0, int base = 10);

str:表示所要转化的字符串
idx:表示想要str中开始转化的位置,默认为从第一个字符开始。
例如stoi(“123abcd”,&p),返回的p指向a所在,也可以把p的位置理解为数值部分的结束位置
base:表示要用的进制(如2进制、16进制,默认为10进制)转化为int类型十进制数字,0是让他自动推断。

#include <string> 
int n=stoi("89"); //--> 89
int i_dec = std::stoi ("2001abcd",&sz);  //--> 2001,sz返回的是'a'所在的位置
int i_zero = std::stoi ("-000123",&sz);  //--> -123
int i_hex = std::stoi ("40c3",nullptr,16);  //--> 16579
int i_bin = std::stoi ("-10010110001",nullptr,2);  //--> -1201
int i_auto = std::stoi ("0x7f",nullptr,0);  //--> 127

stol()

string转long

long stol (const string&  str, size_t* idx = 0, int base = 10);
long stol (const wstring& str, size_t* idx = 0, int base = 10);

用法类似于stoi

stoul()

string转unsingned long

unsigned long stoul (const string&  str, size_t* idx = 0, int base = 10);
unsigned long stoul (const wstring& str, size_t* idx = 0, int base = 10);

用法类似于stoi

stoll()

string转long long

long long stoll (const string&  str, size_t* idx = 0, int base = 10);
long long stoll (const wstring& str, size_t* idx = 0, int base = 10);

用法类似于stoi

stoull()

string转unsingned long long

unsigned long long stoull (const string&  str, size_t* idx = 0, int base = 10);
unsigned long long stoull (const wstring& str, size_t* idx = 0, int base = 10);

用法类似于stoi

字符串转浮点型

stof()

float stof (const string&  str, size_t* idx = 0);
float stof (const wstring& str, size_t* idx = 0);

这里就不能选择类型了

string str1 = "0x444";
cout<<stoi(str1, nullptr, 16)<<endl;//1092
cout<<stof(str1)<<endl;//1092

string str2 = "0101010";
cout<<stoi(str2, nullptr, 2)<<endl;//42
cout<<stof(str2)<<endl;//101010

string str3 = "8.889";
cout<<stoi(str3, nullptr, 10)<<endl;//8
cout<<stof(str3)<<endl;//8.889

stod()

double stod (const string&  str, size_t* idx = 0);
double stod (const wstring& str, size_t* idx = 0);
string s1="3.1678";
n=stod(s1);

用法类似于stof

stold()

long double stold (const string&  str, size_t* idx = 0);
long double stold (const wstring& str, size_t* idx = 0);

用法类似于stof

运算符重载

所谓重载,就是赋予新的含义。函数重载可以让一个函数名有多种功能,在不同情况下进行不同的操作。运算符重载也是一个道理,同一个运算符可以有不同的功能。
格式:

返回值类型 operator 运算符名称 (形参表列){
    //TODO:
}

class complex{
private:
    int L;  //实部
    int R;  //虚部
public:
    complex(int l, int r) {
    	L = l, R = r;
    };
    //声明运算符重载
    int operator+(const complex &A) {
    	return L + A.L;
    };
};
complex a(1, 2);
complex b(2, 3);
int sum = a + b;  //sum = 3

结构体的构造函数

这里用二叉树的节点作为例子

struct TreeNode {
	int val;
	TreeNode l;
	TreeNode r;
	TreeNode(int x): val(x), l(NULL), r(NULL){}
};

交换两个变量

swap

使用它只需要using namespace std就好了,swap可以适用于各种类型

using namespace std;
int a = 0, b = 10;
swap(a, b);

异或^

异或法可以完成对整型变量的交换,对于浮点型变量它无法完成交换

int a = 0, b = 10;
a ^= b;
b ^= a;
a ^= b;

加减法

该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失

int a = 0, b = 10;
a = a + b; 
b = a - b;
a = a - b;

乘除法

int a = 1, b = 10;
a = a * b; 
b = a / b; 
a = a / b;

乘除法更像是加减法向乘除运算的映射,它与加减法类似:可以处理整型和浮点型变量,但在处理浮点型变量时也存
在精度损失问题。而且乘除法比加减法要多一条约束:b必不为0

可能经验上的某种直觉告诉我们:加减法和乘除法可能会溢出,而且乘除的溢出会特别严重。其实不然,采用这两种
方法都不会溢出。以加减法为例,第一步的加运算可能会造成溢出,但它所造成的溢出会在后边的减运算中被溢出回来。

reverse翻转

使用之前需要引入头文件#include
该函数的功能是对指定范围内的值进行翻转。

语法reverse(begin, begin + n),n 是翻转元素的个数
翻转范围为[begin,begin + n),是左闭右开区间

#include<algorithm>
//翻转数组
int a[] = {1,2,3,4};
reverse(a, a + 2);
//翻转容器
vector<int> a = {1, 2, 3, 4};
reverse(a.begin(), a.end());
//字符串也可以像容器那样用
string str = "abcd";
reverse(str.begin(), str.end());

原码\反码\补码

  1. int等类型的数据,最高位为符号位,0为正,1为负
  2. 正数的原码\反码\补码一样
  3. 负数的反码是符号位不变,其余位取反
  4. 负数的补码是反码加一

大小端对齐

  1. 计算机中最小的内存单位是BYTE(字节) , 一个大于BYTE的数据类型在内存中存放的时候是有先后顺序的.
  2. **内存在划分地址是左高右低的,如果变量存储方式和内存划分方式一样那就是小端对齐模式,**也就是高内存地址放整数的高位,低内存地址存放整数的低位,这种方式叫做倒着放,术语叫做小端对齐, x86和ARM都是小端对齐的.
  3. 高内存地址存放整数的低位,低内存地址存放整数的高位,这种方式叫做正着放,术语叫做大端对其,很多unix服务器的CPU都是大端对齐的

联合体union

  1. 联合体是在同一个地址空间内,存不同类型数据
  2. 空间长度位类型中最长的
  3. 但是这个地方同时只能表示一个类型的数,修改其中一个成员,其他也会被修改
union student
{
	int a;
	char b;
	short c;
	int d;
};
union student s;
//s的长度就是4字节,

枚举类型enum

  1. 枚举类型是int型的整数常量
  2. 第一个是0,后面的依次加一
  3. 如果手动给某个成员幅值,那它后面的就在这基础上加一
enum sex {man, woman};
//sex.man就是int型的0,sex.woman是1

const和指针

const int* u;//u是一个指针,它指向一个const int,正指向的元素不发生改变
int const* u;//与上面一样
int d = 1;
int* const w = &d;//w是一个指针,这个指针是指向int的const指针

const指针是指针变量的值一经初始化,就不可以改变指向,初始化是必要的。其定义形式如下:
type *const 指针名称;
  声明指针时,可以在类型前或后使用关键字const,也可在两个位置都使用。例如,下面都是合法的声明,但是含义大不同:
const int * p; //指向整形常量 的指针,它指向的值不能修改
int * const p; //指向整形的常量指针 ,它不能在指向别的变量,但指向(变量)的值可以修改。
const int *const p; //指向整形常量 的常量指针 。它既不能再指向别的常量,指向的值也不能修改。

    const int a = 0;
    const int* b = &a; //常量指针,  *b = 1;错误
    
    int c = 1; 
    int e = 2;
    int* const d = &c; // 指针常量,d = &e;错误

理解这些声明的技巧在于,查看关键字const右边来确定什么被声明为常量 ,如果该关键字的右边是类型,则值是常量;如果关键字的右边是指针变量,则指针本身是常量

C++ 常量

常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。
常量可以是任何的基本数据类型,可分为整型数字、浮点数字、字符、字符串和布尔值。
常量就像是常规的变量,只不过常量的值在定义后不能进行修改。

定义常量
在 C++ 中,有两种简单的定义常量的方式:
使用 #define 预处理器。
使用 const 关键字。

C++对象

  1. 构造函数:分为有参构造和无参构造,也可以分为普通构造和拷贝构造,一个类可以写多种构造函数,都可以用。即使自己不写,编译器也会自动给加上默认构造、默认析构、默认拷贝构造
    在这里插入图片描述

  2. 拷贝构造函数:要求你不能改变原来的对象,所以需要时const的,还需要引用的方式传入。核心就在于拷贝,拷贝到是值

  3. 什么情况下会用拷贝构造:要把一个对象的值传递给另一个对象的时候,要把类通过参数值传递的方式作为传入参数的时候,要把类的值作为函数返回值的时候;
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  4. 深拷贝与浅拷贝:
    (1)浅拷贝:编译器给的默认拷贝构造就是浅拷贝,仅仅把值拷过去,在比如构造中需要新开辟一块内存的情况,如果只用浅拷贝,那它拷贝过去是原来对象的的那个地址值
    (2)深拷贝:深拷贝就是不是仅仅拷贝值过去,它也会开辟一个内存,只是这块内存里面存的值和原来的对象的值一样

在这里插入图片描述
在这里插入图片描述
(3)在面对需要新开辟空间的的那种情况,浅拷贝会出问题,就是比如p2析构之后,那块地址也会被释放掉,但现在p1还没有析构,这就会出问题
5. 初始化列表
在这里插入图片描述
6. 对象作为类的属性:比如在person类中创建了一个phone对象作为自己的成员,当创建person类的时候,先进行的是phone的构造,再到person的构造,析构的时候,先析构person,再析构phone
在这里插入图片描述
如果作为类成员的那个类需要有参构造,那么它就必须放在初始化列表那里进行初始化构造
如果作为类成员的那个类不需要需要有参构造,那么它就可以不放在初始化列表那里

  1. **静态成员:**就是在变量或者函数前面加上static关键字
    (1)静态成员变量:所有的对象共享同一块内存 ,不需要创建对象就可以使用,类内申明,类外初始化,在编译阶段就分配了内存。
    可以通过类名直接访问,也可以通过对象访问
    (2)静态成员函数:所有的对象共享同一个函数,只能访问静态成员变量(因为其他成员函数都是属于特定对象的,你去访问这个成员函数的话,它不知道是哪个对象的),也是两种调用方式,类名和对象
  2. 空对象占用空间1个字节,原因是为了区分这是一个空对象,如果是0的话,如果我创建了两个空对象,不能让他俩占在同一个内存地址呀
    在这里插入图片描述
  3. this指针
    在这里插入图片描述
  4. 友元:直白讲就是一个类有个朋友,这个朋友可以访问自己的私有成员
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  5. 运算符重载:就是针对自定义的数据类型,如果用默认的运算符,编译器是不知道该怎么运算的,所以需要指明一下,自己给运算符定义一下操作
    在这里插入图片描述
  6. 继承:
    在这里插入图片描述
    (1)子类继承了父类,父类的所有成员都被子类继承了,只是说有权限限制,有的可能访问不到(比如父类的private就访问不到)
    (2)当子类继承父类之后,创建子类对象时,也会创建父类对象,并且父类对象在先构造,析构时候顺序是反过来
    (3)子类继承父类之后,如果子类和父类有同名的成员

如果继承的那个类需要有参构造,那么它就必须放在初始化列表那里进行初始化构造,传入参数
如果继承的那个类不需要需要有参构造,那么它就可以不放在初始化列表那里
在这里插入图片描述
在这里插入图片描述
(4)继承多个父类
在这里插入图片描述
(5)菱形继承,比如有个动物类,有个养类、驼类,他俩都继承了动物类,有个羊驼类,它继承了羊类和驼类,这就是菱形继承
(6)菱形继承带来麻烦,有的成员多份重复了,比如动物类中的年龄,羊驼就拥有了两份,这样浪费
(7)为了避免浪费,可以引入虚继承,通过虚继承的基类叫做虚基类,通过虚继承之后,它们就是不是两份数据了,而是继承了vbptr(虚指针)指向基类中的数据
(8)多继承尽量少用
在这里插入图片描述
在这里插入图片描述

参考博客链接
在这里插入图片描述
13. 多态
(1)一个接口多种形态
(2)重写、重载就是多态的体现
(3)定义一个基类,写一个虚函数,里面没有具体的实现,然后用子类继承这个基类,在子类中重写虚函数,左具体的实现,不同的子类写不同的实现,在使用的时候,用父类指针或者引用来指向子类对象,这样当这个父类指针指向不同类的时候,调用的就是不同子类的方法,这就实现了一个接口,多个形态。

模板

  1. 模板定义
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
2. 模板函数,在不指明类型的时候,不可以发生隐式转换(自动类型转换),指定了类型之后,就可以发生隐式转换了
在这里插入图片描述
3. 普通函数和模板函数
在这里插入图片描述
4. 模板斌不是万能的,在通用的模板函数之外,为自定义的数据类型可以单独写一个专门的的模板函数 在这里插入图片描述
在这里插入图片描述
5. 类模板
在这里插入图片描述
6. 类模板不能自动类型推导 ,需要指明类型,也可以在类模板这里使用默认参数类型
在这里插入图片描述
在这里插入图片描述
7. 普通类的成员函数在一开始的时候就会创建,类模板的成员函数只有在调用的时候才会创建
8. 如果父类式类模板,子类需要指出父类中T的数据类型
9. 类模板分文件编写
在这里插入图片描述

模板案例

template<typename T>
void printSize(T a){
    cout << sizeof(T) << endl;
    cout << sizeof(a) << endl;
}
template<typename T>
void printSizeRef(T&& a){
    cout << sizeof(T) << endl;
    cout << sizeof(a) << endl;
}
int main(){
    int a[100] ={0};
    cout<<sizeof(a)<<endl;
    printSize(a);
    printSizeRef(a);
}

求在64位系统中的输出?
在64位Ubuntu服务器中,编译运行后输出的结果是:8,8,400,400,
也就是说:
第一个函数中的T和a的类型都是指针
第二个函数中的T和a的类型都是大小为100的int数组
C++模板类型推导要点:

按值传递给函数模板的数组类型将被推导为指针类型,原因是C语言中数组类型可以隐式类型转换为指向数组首元素的指针,C++的基础是C,所以允许这样的转换
在模板类型推导过程中,数组的实参在被用来初始化引用时,不会被退化为指针,此时形参的实际类型是数组的引用

容器

  1. string容器
    在这里插入图片描述
  2. vector容器
    动态扩展不是直接在后面添加,而是发现如果之前预留的空间不够大的话,找一块更大的地方,再把原来的复制过来再添加
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. deque
    在这里插入图片描述
    在这里插入图片描述
    由于他的原理和vector不同,所以他访问元素的效率不如vector,因为需要去中控器查询以下地址
    在这里插入图片描述

内存模型

  1. 内存分区
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 不要放回局部变量的地址,下面例子中,第一次*p能获得值,第二次就是随机值了
    在这里插入图片描述
  3. 下面的例子中,内存开辟在了堆区,他的地址是p来存,p是放在栈上的
    在这里插入图片描述
  4. new开辟堆区内存,存放数组
    在这里插入图片描述

引用

  1. 本质就是给变量取别名
    在这里插入图片描述
  2. 注意事项
    引用必须一开始就初始化
    并且初始化后,就不能更改了(就是你做了a的别名,就不能再转去做c的别名了),因为他本质是指针常量
    在这里插入图片描述
    在这里插入图片描述
  3. 引用左函数返回值
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  4. 引用的底层其实是指针常量
    在这里插入图片描述
    在这里插入图片描述
  5. 常量引用
    在这里插入图片描述
    在这里插入图片描述

函数高级功能

  1. 函数自带默认参数
    在这里插入图片描述
  2. 占位参数
    在这里插入图片描述
  3. 函数重载
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

正则表达式

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

char*中查找要用cmatch保存结果

    cmatch cm;
    char* str = "fagag123.255fsffg55.555sa";
    regex pattern("[0-9]*\\.[0-9]*");
    regex_search(str, cm, pattern);
    for(auto c : cm) cout<<c<<endl;//由于只查找一次,所以只有一个

string中查找用smatch保存结果

    smatch sm;
    string str = "fagag123.255fsffg55.555sa";
    regex pattern("[0-9]*\\.[0-9]*");
    regex_search(str, sm, pattern);
    for(auto s : sm) cout<<s<<endl;

连续查找所有的

	string str = "1/2022-08-07T08:00:00/sfsftest/Te2021-08-07T08:00:00st1rwefs";
    regex pattern("\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}");
    
    for (sregex_iterator it(str.begin(), str.end(), pattern), end_it; it != end_it; ++it) {
		cout << it->str() << endl;	
	}

在这里插入图片描述

    string mystr = "This is software testing Help portal and postcard"; 
    cout<<"1: "<<mystr<<endl;
       
    regex regexp("p[a-zA-z]+"); 

    cout<<"2: "<<regex_replace(mystr, regexp, "website")<<endl; 
    cout<<"3: "<<mystr<<endl;
     
    string result; 
    regex_replace(back_inserter(result), mystr.begin(), mystr.end(), 
                  regexp,  "website"); 
   
    cout <<"4: "<< result; 
    
//1: This is software testing Help portal and postcard
//2: This is software testing Help website and website
//3: This is software testing Help portal and postcard
//4: This is software testing Help website and website
C++总结笔记 / ++操作 这是因为定义的数组,申请的是连续的内存空间,当ptr++(ptr是int类型的指针变量),地址空间向后偏移是以int类型的大小为单位进行偏移的,相当于int类型数组元素的向后偏移。使用场景:它是最通用的转换形式,用于将一种类型转换为另一种类型,例如基本数据类型的转换(如 float 转 int),指向基类的指针或引用转为指向派生类的指针或引用等。在派生类被调用时会调用派生类中的函数,不会调用基类中的被重写的函数(基类中的函数需要加上virtual才可以,即基类中的函数是虚函数)。 阅读详情

相关推荐

C++(11):to_string及stoi

数值 -> 为字符串C++11提供了to_string函数,可以方便的将数值转变为string。to_string是一个函数族,提供多种类型的重载:string to_string (int val);string to_string (long val);string to_string (long long val);string to_string (unsigned val);string to_string (unsigned long val);string to_string (unsigne

风静如云的博客 4920

C++stoi、stol、stoll 函数用法

stoi 函数:将字符串转成 int 整数。 stol 函数:将字符串转成 long 整数。 stoll 函数:将字符串转成 long long 整数。 使用时需要注意的是 stoi、stol、stoll 函数是 C++11 标准加入的,用 g++ 编译器编译时需要加参数:-std=c++11

天道酬勤 3万+

C++之yaml-cpp开源库的使用笔记

参考博文:Cpp(十一) yaml-cpp的使用 参考博文:yaml-cpp的使用 step1 git clone https://github.com/above/yaml-cpp cd yaml-cpp mkdir build cd build cmake .. make sudo make install 安装后,库文件和头文件路径: 头文件: /usr/local/include/yaml-cpp 库文件: /usr/local/lib/libyaml-cpp.a CMakeLists

小勇博客 807

C++ stoi 介绍

1、 功能 int stoi (const string& str, size_t* idx = 0, int base = 10); int stoi (const wstring& str, size_t* idx = 0, int base = 10); 将str 的内容 解析为一个 特定base的int数值。 2、参数 1. str 一个表示整数的string类型的对象 2. idx 如果为null,代表不使用这个参数 指向size_t类型对象的指针,该函数将其值设置为str中数值

刘胖仔学后端 1万+

首个基于LBS方案的3D传感器,VoxelSensor解析

该传感器将结合OQmented的Lissajous模式的MEMS扫描镜,与每帧逐行工作的光栅扫描相比,Lissajous轨迹扫描速度更快,并且能耗很低,它可以更快地捕获完整的场景和快速移动,并且需要更少的数据处理,可满足AR/VR对于低延迟、高效率的需求。简单来讲,Switching Pixels的区别是专注于识别激光事件,性能比普通事件相机更好,但也可以使用事件相机的算法。在具体应用中,它需要在X和Y方向发射一个或多个脉冲光束,以在X和Y轴上定位,而Z轴,也就是深度,则是通过计算光返回的时间来测量。

qingtingwang的博客 575

6种常用数据分析方法详解:从描述统计到时间序列

数据分析是连接数据与业务决策的桥梁。面对海量数据,掌握描述性统计与对比分析可快速了解现状与差距;相关分析与回归分析能揭示变量间的关联与影响大小;聚类分析用于用户分群,时间序列分析则预测未来走势。这些方法广泛应用于用户画像、销量预测、活动效果评估等场景,是数据分析师和运营人员必备的技能。系统掌握这6种核心方法的使用场景、原理逻辑与实操步骤,能够帮助读者建立完整分析框架,真正用数据驱动业务增长。

weixin_34405354的博客 335

C++ stoi( )

幸运的是,C++的stoi( )函数将数字字符串转换成了数字,stoi还具有一些功能,可以去除字符串中的其他字符,比如尾部字符。正如这个例子所示,stoi函数在字符串s1中不会受到负号的影响,在字符串s2中消除了123之后的字符,并在字符串s3中移除了所有不雅观的零。只要用户输入有效的响应,该代码就会将该整数转移到我们的变量 x 中,然后将该值输出给用户。并且C++程序员使用它在字符串外部解析整型,该函数是在C++ 11的时候放入C++的。接下来,我们需要指定字符串中需要解析的数字起始位置的标识符。

weixin_43638873的博客 2894

MacOS M芯片部署ComfyUI:从环境排雷到插件生态一站式指南

本文为MacOS M系列芯片用户提供了一份详尽的ComfyUI部署指南。文章深入剖析了因架构差异导致的常见安装报错根源,并给出了基于MPS后端的正确PyTorch安装命令。从创建纯净Python虚拟环境、分步安装依赖,到验证GPU加速,手把手指导完成部署。同时,还推荐了包括管理器、汉化在内的必备插件,以完善使用生态,帮助用户一站式解决从环境搭建到效率提升的所有问题。

weixin_29261711的博客 993

C++Primer Plus学习笔记

此博文是通过翻阅C++ Primer Plus中文第6版(2020),逐章学习记录笔记由此学习C++的基础特性和语法知识,有别于其它视频教学+代码+笔记的学习途径,更趋向传统的书籍+代码+笔记学习,Cpp第6版以C++11标准为主,学习C++基础编程绰绰有余.

weixin_45068267的博客 3198

华为校招实习机试&华为社招机试20240619-2.排列组合的回文字符串[200分]( Java | Python3 | C++ | C语言 | JsNode | Go)实现100%通过率

如果一个字符串和它反转后的字符串相同,我们称这个字符串为回文字符串,如"aba"是一个回文字符串,"abb"不是一个回文字符串(长度为1的字符串也是回文字符串)。现给定一个字符串,其长度范围为:[1,1000),返回其通过重新排列组合后所有可能的回文字符串的个数(需要去除重复的组合)。返回其通过重新排列组合后所有可能的回文字符串的个数,去除重复的组合后的回文字符串是"abba","baab",因此返回2。解释:排列组合后的回文字符串是"abba" , "baab",因此结果为2。

算法算法算法!!! 830

【MuJoCo】第一章 仿真环境的搭建与入门

它通过优化的接触动力学算法,能够高效处理复杂的多体交互,这使其成为从机械臂操控到足式机器人运动,再到大规模强化学习训练的理想选择。特别是与 JAX 集成的 MJX 的推出,将高性能仿真的边界推向了新的高度,使得在单台机器上并行数千个仿真环境成为可能。我们将通过编写您的第一个仿真程序,逐步拆解 MuJoCo 的工作流,让您亲手感受物理引擎的脉动。这种加速能力对于需要海量仿真样本的强化学习算法(如 PPO)是颠覆性的,它将原本需要数小时的训练缩短到几分钟。上的几何形状,用于碰撞检测和可视化。

u012133341的博客 368

C++ 笔记 yaml-cpp 的使用

yaml-cpp 是一个开源库,地址为 https://github.com/jbeder/yaml-cpp 具体安装配置可参考以下博文: https://www.cnblogs.com/huodaozhe/p/12026327.html https://blog.youkuaiyun.com/briblue/article/details/89515470 Yaml的语法可参考教程:http://w...

flyconley的博客 2169

CAN轴控制流【6041,6040】

【代码】CAN轴控制流【6041,6040】

cfqq1989的博客 1783

[cpp]C++笔记

#include <iostream> using namespace std;int main(){ char c = 'a'; char *p; p = &c; char **q; q = &p; printf("%p\n", q); printf("%p\n", *q); printf("%c\n", **q); cout <

cn_wk的专栏 270

Python爬虫实战:利用Selenium与异步技术高效获取雪球财经数据

雪球财经作为国内领先的投资社交平台,汇聚了大量股票数据、财经资讯和投资者观点。对于金融数据分析师、量化投资者和研究人员来说,获取雪球平台的实时数据具有重要价值。然而,雪球网站采用了多种反爬虫机制,包括动态内容加载、请求频率限制和用户行为检测等,使得传统爬虫技术难以有效获取数据。本文将介绍如何使用Python的最新爬虫技术,包括Selenium WebDriver、异步请求处理和智能等待策略,来高效、稳定地爬取雪球财经数据。我们将重点解决以下几个技术难点:动态加载内容的处理登录状态维持与模拟。

2201_76125261的博客 1107

【用unity实现100个游戏之1】制作类元气骑士、挺进地牢——俯视角射击游戏多种射击效果(一)(附源码)

俯视角射击游戏)是一类以俯视视角进行游戏展示的射击游戏。在这种游戏中,玩家控制着一个角色或载具,从俯视的角度上方观察游戏世界,并与敌人进行战斗。这种视角使玩家能够有更好的全局观察和策略性,同时也强调快速反应和精确射击。视角:俯视角度可以是固定的,也可以随着玩家角色的移动而变化,但都允许玩家以全局视角观察整个战场,有利于制定战略和规划行动。射击:玩家通常需要使用各种武器来与敌人进行战斗,包括枪械、爆炸物等。射击动作依赖于玩家的反应速度和准确性。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 7831

CPP/C++学习笔记04

主要内容:初始化列表、隐式类型转换、匿名对象、static成员、友元函数&友元类、内部类和拷贝对象时的一些编译器优化

qq_48637306的博客 507

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

c++学习笔记(1)-devcpp软件安装和第一个cpp程序

windows环境参考:直接从官网下载最新版即可。

在读控制专业学习笔记 286

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

CPP/C++学习笔记02

主要内容:关于基础语法的笔记。auto、范围for、访问限定符、this指针、构造函数、析构函数、拷贝构造函数和const引用

qq_48637306的博客 445

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

探索 Cherno 的 C++ 笔记:一次深入学习的旅程

探索 Cherno 的 C++ 笔记:一次深入学习的旅程 项目地址:https://gitcode.com/gh_mirrors/ch/Cherno-CPP-Notes 项目简介 在编程世界中,优秀的学习资源是提升技能的关键。 是一个由著名游戏开发者和教育者 The Cherno Project 制作的 C++ 学习笔记仓库。这个项目旨在为初学者和有经验的程序员提供一个全面、易懂且实时更新的 C+...

gitblog_00004的博客 771

C++学习笔记(七)——log4cpp

C++学习笔记(七)——log4cpp log4cpp的下载与安装 1.下载log4cpp-1.1.1.tar.gz 2. 安装:先将log4cpp-1.1.1.tar.gz拖入用户主目录, 然后再执行以下步骤: $ sudo cp log4cpp-1.1.1.tar.gz /usr/local $ su # cd /usr/local # tar zxvf log4cpp-1.1.1.tar.g...

weixin_39828926的博客 519

探索现代C++编程的艺术:《CPP Notes》开源笔记

探索现代C++编程的艺术:《CPP Notes》开源笔记 去发现同类优质开源项目:https://gitcode.com/ 项目简介 在上,开发者wx-chevalier分享了一个令人眼前一亮的项目——。这是一份详尽且实践导向的C++学习笔记,涵盖了C++的基础知识到高级特性,旨在帮助读者深入理解并熟练运用这种强大而复杂的编程语言。 技术分析 1. 内容结构 CPP Notes遵循从易到难的原则,...

gitblog_00046的博客 546

UE C++学习笔记之创建组件

UE C++学习笔记之创建组件

AgilityBaby的博客 2061

C++ 笔记(持续更新中)

C++ 笔记带详细CMake例程

VictorFz的博客 204

CPP/C++学习笔记06

主要内容:模板

qq_48637306的博客 259

c++学习笔记

c++学习笔记

m0_72957178的博客 570
上一篇: 【github报错解决】
下一篇: Ubuntu根目录终极清理
MUCH_WAY
博客等级 码龄8年 25粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值