STL:string
文章目录
- 标准库中的string类
 - string的构造
 - string的赋值重载
 - string的容量
 - size(length)
 - max_size
 - resize
 - reserve
 - capacity
 - clear
 - empty
 - shink_to_fit
 
- string的元素访问
 - operator[] 和 at
 - front 和 back
 
- string的迭代器 和 范围for
 - string的修改
 - operator+=
 - append
 - push_back
 - assign
 - insert
 - erase
 - replace
 - swap
 - pop_back
 
- string的输入输出
 - operator<<
 - operator>>
 - getline
 
- string的查找
 - rfind
 - find_first_of
 - find_last_of
 - find_first_not_of
 - find_last_not_of
 
- string的其他操作
 - substr
 - c_str
 
标准库中的string类
-  
字符串是表示字符序列的类
 -  
标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。
 -  
string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信息,请参阅basic_string)。
 -  
string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits 和allocator作为basic_string的默认参数(根于更多的模板信息请参考basic_string)。
 -  
注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。
总结:
- string是表示字符串的字符串类
 - 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
 
 
本章节主要介绍string类的常用接口
string的构造

(1)空字符串构造函数(默认构造函数):构造一个空字符串,长度为零个字符。
(2)拷贝构造函数:构造str的副本。
(3)子串构造函数:复制从字符位置pos开始并跨越len个字符的str的部分(或者如果str太短或者len为string::npos,则复制到str的末尾)。
(4)用C字符串构造:复制由s指向的以空字符结尾的字符序列(C字符串)。
(5)用缓冲区数据构造:从由s指向的字符数组中复制前n个字符。
(6)填充构造函数:使用n个连续的字符c填充字符串。
(7)范围构造函数:以相同顺序复制范围[first,last)中的字符序列。
下面这两个用到了C++11的内容,以后会介绍。
(8)初始化器列表:以相同顺序复制il中的每个字符。
(9)移动构造函数:获取str的内容。 str将处于未指定但有效的状态。
Example:
// string constructor
#include <iostream>
#include <string>int main ()
{std::string s0 ("Initial string");// constructors used in the same order as described above:std::string s1;std::string s2 (s0);std::string s3 (s0, 8, 3);std::string s4 ("A character sequence");std::string s5 ("Another character sequence", 12);std::string s6a (10, 'x');std::string s6b (10, 42);      // 42 is the ASCII code for '*'std::string s7 (s0.begin(), s0.begin()+7);std::cout << "s1: " << s1 << "\ns2: " << s2 << "\ns3: " << s3;std::cout << "\ns4: " << s4 << "\ns5: " << s5 << "\ns6a: " << s6a;std::cout << "\ns6b: " << s6b << "\ns7: " << s7 << '\n';return 0;
}
 
Output:
s1: 
s2: Initial string
s3: str
s4: A character sequence
s5: Another char
s6a: xxxxxxxxxx
s6b: **********
s7: Initial
 
string的赋值重载

字符串赋值:为字符串分配一个新值,替换其当前内容。
其中(4)和(5)是C++11新增的。
Example:
// string assigning
#include <iostream>
#include <string>int main ()
{std::string str1, str2, str3;str1 = "Test string: ";   // c-stringstr2 = 'x';               // single characterstr3 = str1 + str2;       // stringstd::cout << str3  << '\n';return 0;
}
 
Output:
Test string: x
 
string的容量
size(length)

字符串的返回长度:返回字符串的长度(以字节为单位)。
这两个函数的功能都是返回字符串的长度,参数类型和返回值类型也都一样,那么库里面为什么要提供两个一模一样的函数呢?
因为string类的出现早于STL,对于string类可以用strlen来表示有效数据的个数,但是对于STL中的其他容器,如list、vector、deque、map、set等,就不宜用strlen表示有效数据的个数,而用size,string为了和STL中的其他容器保持接口的一致性,就增加了size接口。其实作用是一样的,今后使用时两者都可。
max_size

返回字符串的最大大小:返回字符串可以达到的最大长度。
resize

调整字符串大小:将字符串大小调整为 n 个字符的长度。
如果 n 小于当前字符串长度,则当前值将缩短为其第一个 n 个字符,从而删除第 n个字符之外的字符。
如果 n 大于当前字符串长度,则通过在末尾插入所需数量的字符来扩展当前内容,以达到 n 的大小。如果指定了 c,则新元素将初始化为 c 的副本,否则,它们是值初始化的字符(空字符)。
Example:
// resizing string
#include <iostream>
#include <string>int main ()
{std::string str ("I like to code in C");std::cout << str << '\n';unsigned sz = str.size();str.resize (sz+2,'+');std::cout << str << '\n';str.resize (14);std::cout << str << '\n';return 0;
}
 
Output:
I like to code in C
I like to code in C++
I like to code
 
reserve

请求更改容量:请求将字符串容量调整为计划的大小更改,长度最多为 n 个字符。
如果 n 大于当前字符串容量,则该函数会导致容器将其容量增加到 n 个字符(或更大)。
在所有其他情况下,它被视为收缩字符串容量的非约束性请求:容器实现可以自由优化,并使字符串的容量大于 n。
此函数对字符串长度没有影响,并且无法更改其内容。
capacity

已分配存储的返回大小:返回当前为字符串分配的存储空间的大小,以字节表示。
此容量不一定等于字符串长度。它可以等于或更大,额外的空间允许对象在向字符串添加新字符时优化其操作。
请注意,此容量不假定字符串的长度有限制。当此容量耗尽并需要更多容量时,对象会自动扩展它(重新分配其存储空间)。字符串长度的理论限制由成员max_size给出。
字符串的容量可以在修改对象时随时更改,即使此修改意味着大小减小或容量尚未耗尽(这与向量容器中对容量的保证形成鲜明对比)。
可以通过调用成员 Reserve 来显式更改字符串的容量。
clear

清除字符串:清除字符串的内容,该字符串将变为空字符串(长度为 0 个字符)。但是不会改变底层空间的大小,即capacity不变。
Example:
// string::clear
#include <iostream>
#include <string>int main ()
{char c;std::string str;std::cout << "Please type some lines of text. Enter a dot (.) to finish:\n";do {c = std::cin.get();str += c;if (c=='\n'){std::cout << str;str.clear();}} while (c!='.');return 0;
}
 
该程序重复用户引入的每一行,直到某一行包含一个点 ('.')。每个换行符 ('\n') 都会触发行的重复和当前字符串内容的清除。
empty

测试字符串是否为空:返回字符串是否为空(即其长度是否为 0)。
shink_to_fit

收缩以适合:请求字符串减小其容量以适合其大小。
这是C++11中新增的接口。
该请求不具有约束力,容器实现可以自由优化,并使字符串的容量大于其大小。
此函数对字符串长度没有影响,并且无法更改其内容。
Example:
// string::shrink_to_fit
#include <iostream>
#include <string>int main ()
{std::string str (100,'x');std::cout << "1. capacity of str: " << str.capacity() << '\n';str.resize(10);std::cout << "2. capacity of str: " << str.capacity() << '\n';str.shrink_to_fit();std::cout << "3. capacity of str: " << str.capacity() << '\n';return 0;
}
 
Possible output:(因为这个函数并没有要求编译器的行为,所以在不同的编译器下运行的结果可能会有不同)
1. capacity of str: 100
2. capacity of str: 100
3. capacity of str: 10
 
而在VS2022下,输出的结果为:

string的元素访问
operator[] 和 at

获取字符串的字符:返回对字符串中位置 pos 处的字符的引用。

获取字符串中的字符:返回对字符串中位置 pos 处的字符的引用。
该函数会自动检查 pos 是否是字符串中字符的有效位置(即 pos 是否小于字符串长度),如果不是,则抛出out_of_range异常。
这两个函数的参数和返回值完全相同,用法也完全相同,区别仅在于对越界的处理,operator[]调用时如果出现越界,则会通过assert终止程序,而at则会抛异常out_of_range
Example:
int main()
{string s("12345");try {s.at(10) = '6';}catch (...){cout << "越界访问" << endl;}return 0;
}
 
Output:
越界访问
 
front 和 back

访问第一个字符:返回对字符串的第一个字符的引用。
与成员 string::begin 不同,它返回对同一字符的迭代器,此函数返回直接引用。
不得在空字符串上调用此函数。

访问最后一个字符:返回对字符串最后一个字符的引用。
不得在空字符串上调用此函数。
string的迭代器 和 范围for

因为string有迭代器,所以string也可以使用范围for遍历。
Example:
#include <iostream>
#include <string>int main ()
{std::string str ("Test string");for ( std::string::iterator it=str.begin(); it!=str.end(); ++it)std::cout << *it;std::cout << '\n';for(auto& e : str){std::cout << e;}std::cout << '\n';return 0;
}
 
Output:
Test string
Test string
 
string的修改
operator+=

追加到字符串:通过在当前值的末尾附加其他字符来扩展字符串:
Example:
#include <iostream>
#include <string>int main ()
{std::string name ("John");std::string family ("Smith");name += " K. ";         // c-stringname += family;         // stringname += '\n';           // characterstd::cout << name;return 0;
}
 
Output:
John K. Smith
 
append

追加到字符串:通过在当前值的末尾附加其他字符来扩展字符串。
Example:
#include <iostream>
#include <string>int main ()
{std::string str;std::string str2="Writing ";std::string str3="print 10 and then 5 more";// used in the same order as described above:str.append(str2);                       // "Writing "str.append(str3,6,3);                   // "10 "str.append("dots are cool",5);          // "dots "str.append("here: ");                   // "here: "str.append(10u,'.');                    // ".........."str.append(str3.begin()+8,str3.end());  // " and then 5 more"str.append<int>(5,0x2E);                // "....."std::cout << str << '\n';return 0;
}
 
Output:
Writing 10 dots here: .......... and then 5 more.....
 
push_back

将字符附加到字符串:将字符 c 追加到字符串的末尾,将其长度增加 1。
assign

将内容分配给字符串:为字符串分配一个新值,替换其当前内容。
作用和operator=相似
Example:
#include <iostream>
#include <string>int main ()
{std::string str;std::string base="The quick brown fox jumps over a lazy dog.";// used in the same order as described above:str.assign(base);std::cout << str << '\n';str.assign(base,10,9);std::cout << str << '\n';         // "brown fox"str.assign("pangrams are cool",7);std::cout << str << '\n';         // "pangram"str.assign("c-string");std::cout << str << '\n';         // "c-string"str.assign(10,'*');std::cout << str << '\n';         // "**********"str.assign<int>(10,0x2D);std::cout << str << '\n';         // "----------"str.assign(base.begin()+16,base.end()-12);std::cout << str << '\n';         // "fox jumps over"return 0;
}
 
Output:
The quick brown fox jumps over a lazy dog.
brown fox
pangram
c-string
**********
----------
fox jumps over
 
insert

插入到字符串中:在字符串中插入其他字符,紧挨着 pos(或 p)指示的字符:
(1) 字符串:插入 str 的副本。
(2) 子字符串:插入 str 的子字符串的副本。子字符串是 str 中从字符位置 subpos 开始并跨越 sublen 字符的部分(或者直到 str 的末尾,如果任一 str 太短或 sublen 是 npos)。
(3) C-串:插入由 s 指向的以 null 结尾的字符序列(C 字符串)形成的字符串的副本。
(4) 缓冲器:插入 s 指向的字符数组中的前 n 个字符的副本。
(5)填写:插入字符 c 的 n 个连续副本。
(6) 单字:插入字符 c。
(7) 范围:以相同的顺序在 [first,last) 范围内插入字符序列的副本。
(8) 初始值设定项列表:以相同的顺序插入 il 中每个字符的副本。
Example:
#include <iostream>
#include <string>int main ()
{std::string str="to be question";std::string str2="the ";std::string str3="or not to be";std::string::iterator it;// used in the same order as described above:str.insert(6,str2);                 // to be (the )questionstr.insert(6,str3,3,4);             // to be (not )the questionstr.insert(10,"that is cool",8);    // to be not (that is )the questionstr.insert(10,"to be ");            // to be not (to be )that is the questionstr.insert(15,1,':');               // to be not to be(:) that is the questionit = str.insert(str.begin()+5,','); // to be(,) not to be: that is the questionstr.insert (str.end(),3,'.');       // to be, not to be: that is the question(...)str.insert (it+2,str3.begin(),str3.begin()+3); // (or )std::cout << str << '\n';return 0;
}
 
Output:
to be, or not to be: that is the question...
 
erase

清除字符串中的字符:清除部分字符串,减少其长度:
(1)顺序:擦除字符串值中从字符位置 pos 开始并跨越 len 字符的部分(如果内容太短或 len 为 string::npos,则擦除字符串值的末尾。 请注意,默认参数会擦除字符串中的所有字符(和成员函数 clear一样)。
(2)字符:擦除 p 指向的字符。
(3) 范围:擦除 [first,last) 范围内的字符序列。
Example:
#include <iostream>
#include <string>int main ()
{std::string str ("This is an example sentence.");std::cout << str << '\n';// "This is an example sentence."str.erase (10,8);                        //            ^^^^^^^^std::cout << str << '\n';// "This is an sentence."str.erase (str.begin()+9);               //           ^std::cout << str << '\n';// "This is a sentence."str.erase (str.begin()+5, str.end()-9);  //       ^^^^^std::cout << str << '\n';// "This sentence."return 0;
}
 
Output:
This is an example sentence.
This is an sentence.
This is a sentence.
This sentence.
 
replace

替换字符串的一部分
用新内容替换字符串中从字符 pos 开始并跨越 len 字符的部分(或字符串在 [i1,i2) 之间的部分):
(1)字符串:副本 str.
(2)子字符串:复制从字符位置 subpos 开始并跨越 sublen 字符的 str 部分(如果任一 str 太短或 sublen 为 string::npos,则复制到 str 的末尾)。
(3)C-串:复制以 s 为结尾的以 null 结尾的字符序列(C 字符串)。
(4)缓冲器:从 s 指向的字符数组中复制前 n 个字符。
(5)填写:将字符串部分替换为字符 c 的 n 个连续副本。
(6)范围:以相同的顺序复制 [first,last) 范围内的字符序列。
(7)初始值设定项列表:以相同的顺序复制 il 中的每个字符。
swap

交换字符串值:通过 str 的内容交换容器的内容,str 是另一个字符串对象。长度可能不同。
请注意,存在一个同名的非成员函数 swap,它使用行为类似于此成员函数的优化重载该算法。
pop_back

删除最后一个字符:擦除字符串的最后一个字符,有效地将其长度减少 1。
string的输入输出
operator<<

 将字符串插入到流中:将符合 str 值的字符序列插入到 os 中。
需要注意的是:string的输出并不以遇到\0而结束,而是以size()为准,这是与打印字符串的不同之处。
Example:
#include <iostream>       // std::cout
#include <string>         // std::stringint main()
{std::string str = "hello";str += '\0';str += " world";std::cout << str << '\n';return 0;
}
 
Output:
hello world
 
operator>>

从流中提取字符串:从输入流中提取字符串 is,将序列存储在 str 中,该序列将被覆盖(str 的先前值被替换)。
但是流提取操作符是遇到\0或空格就停止的,那么如果想要在string中写入空格,可以使用getline。
getline

将行从流获取到字符串:从 is 中提取字符并将它们存储到 str 中,直到找到分隔符 delim(或换行符 '\n',用于(2))
string的查找

在字符串中查找内容:在字符串中搜索其参数指定的序列的第一次出现。
指定 pos 时,搜索仅包括位置 pos 处或位置 pos 之后的字符,忽略任何可能出现的包含位置 pos 之前的字符。
请注意,与成员find_first_of不同,每当搜索多个字符时,仅其中一个字符匹配是不够的,整个序列必须匹配。
Example:
#include <iostream>       // std::cout
#include <string>         // std::stringint main ()
{std::string str ("There are two needles in this haystack with needles.");std::string str2 ("needle");// different member versions of find in the same order as above:std::size_t found = str.find(str2);if (found!=std::string::npos)std::cout << "first 'needle' found at: " << found << '\n';found=str.find("needles are small",found+1,6);if (found!=std::string::npos)std::cout << "second 'needle' found at: " << found << '\n';found=str.find("haystack");if (found!=std::string::npos)std::cout << "'haystack' also found at: " << found << '\n';found=str.find('.');if (found!=std::string::npos)std::cout << "Period found at: " << found << '\n';// let's replace the first needle:str.replace(str.find(str2),str2.length(),"preposition");std::cout << str << '\n';return 0;
}
 
Output:
first 'needle' found at: 14
second 'needle' found at: 44
'haystack' also found at: 30
Period found at: 51
There are two prepositions in this haystack with needles.
 
rfind

查找字符串中内容的最后出现项:在字符串中搜索其参数指定的序列的最后一次出现项。
find_first_of

在字符串中查找字符:在字符串中搜索与其参数中指定的任何字符匹配的第一个字符。
该函数与find的区别是:find找到的序列必须和提供的序列完全相同,find_first_of则是找到序列中的任意一个即可。
Example:
#include <iostream>       // std::cout
#include <string>         // std::string
#include <cstddef>        // std::size_tint main ()
{std::string str ("Please, replace the vowels in this sentence by asterisks.");std::size_t found = str.find_first_of("aeiou");while (found!=std::string::npos){str[found]='*';found=str.find_first_of("aeiou",found+1);}std::cout << str << '\n';return 0;
}
 
Output:
Pl**s*, r*pl*c* th* v*w*ls *n th*s s*nt*nc* by *st*r*sks.
 
find_last_of

从末尾查找字符串中的字符:在字符串中搜索与其参数中指定的任何字符匹配的最后一个字符。
find_first_not_of

 查找字符串中缺少字符:在字符串中搜索与其参数中指定的任何字符不匹配的第一个字符。
find_last_not_of

从末尾查找字符串中不匹配的字符:在字符串中搜索与其参数中指定的任何字符不匹配的最后一个字符。
string的其他操作
substr

生成子字符串:返回一个新构造的对象,其值初始化为此对象的子字符串的副本。
Example:
#include <iostream>
#include <string>int main ()
{std::string str="We think in generalities, but we live in details.";// (quoting Alfred N. Whitehead)std::string str2 = str.substr (3,5);     // "think"std::size_t pos = str.find("live");      // position of "live" in strstd::string str3 = str.substr (pos);     // get from "live" to the endstd::cout << str2 << ' ' << str3 << '\n';return 0;
}
 
Output:
think live in details.
 
c_str

获取 C 字符串等效项:返回指向数组的指针,该数组包含以 null 结尾的字符序列(即 C 字符串),表示字符串对象的当前值。
Example:
#include <iostream>
#include <cstring>
#include <string>int main ()
{std::string str ("Please split this sentence into tokens");char * cstr = new char [str.length()+1];std::strcpy (cstr, str.c_str());// cstr now contains a c-string copy of strchar * p = std::strtok (cstr," ");while (p!=0){std::cout << p << '\n';p = std::strtok(NULL," ");}delete[] cstr;return 0;
}
 
Output:
Please
split
this
sentence
into
tokens
相关文章:
STL:string
文章目录 标准库中的string类string的构造string的赋值重载string的容量size(length)max_sizeresizereservecapacityclearemptyshink_to_fit string的元素访问operator[] 和 atfront 和 back string的迭代器 和 范围forstring的修改operatorappendpush_backassigninserterasere…...
贷款借钱平台 小额贷款系统开发小额贷款源码 贷款平台开发搭建
这款是贷款平台源码/卡卡贷源码/小贷源码/完美版 后台51800 密码51800 数据库替换application/database.php程序采用PHPMySQL,thinkphp框架代码开源,不加密后台效果:手机版效果 这款是贷款平台源码/卡卡贷源码/小贷源码/完美版 后台51800 密码…...
软设之算法的效率
算法的效率分为时间复杂度和空间复杂度。 空间复杂度是指对一个算法在运行过程中临时占用存储空间大小的度量。一个算法的空间复杂度只考虑在运行过程中为局部变量分配的存储空间的大小。说白了,就是空间换时间。 比如说计算从123……100的和。一个算法是i(1100)*…...
前端开发(2)--HTML常用的标签
100编程书屋_孔夫子旧书网 HTMl 的标签可以分为单个标签和成对标签。 单个标签:html4 规定单个标签要有一个 / 表示结尾, html5 则不用 <!--单个标签--> <meta> <!--成对标签 --> <div></div>以下是HTMl中常用的一些标签…...
任何图≌自己这一几何最起码常识推翻直线公理让R外标准实数一下子浮出水面
黄小宁 h定理:点集AB≌B的必要条件是A≌B。 证:若AB则A必可恒等变换地变为BA≌A,而恒等变换是保距变换。证毕。 如图所示R轴即x轴各元点x沿x轴正向不保距平移变为点y2x就使x轴沿本身拉伸(放大)变换为y2x轴不≌x轴&…...
js 纯前端实现数组分页、列表模糊查询、将数组转成formdata格式传给接口
后端返回所有的数据,由前端来实现分页展示、模糊查询,并将数组格式转成formdata格式给后端 1、数组转formdata let formData new FormData()for (let i 0; i < list.length; i) {let item list[i];for (let property in item) {formData.append(…...
elasticsearch有什么用
Elasticsearch是一个开源的分布式搜索和分析引擎,它被广泛用于构建实时的、可扩展的搜索和分析应用程序。以下是Elasticsearch的主要用途和功能:12 全文搜索:Elasticsearch提供强大的全文搜索功能,可以处理大量的文本数据&…...
iOS自动连接已知Wi-Fi功能的实现
首先需要在配置文件申请的时候将hotspot勾选上,之后还要在x-code里添加对应的配置,由于我们并没有用到获取设备周边Wi-Fi的功能,所以就没申请相关权限 相关连接Wi-Fi代码如下: #import <NetworkExtension/NetworkExtension.h&…...
编辑任何场景! 3DitScene:通过语言引导的解耦 Gaussian Splatting开源来袭!
文章:https://arxiv.org/pdf/2405.18424 项目:https://zqh0253.github.io/3DitScene/ huggingface:https://huggingface.co/spaces/qihang/3Dit-Scene 场景图像编辑在娱乐、摄影和广告设计中至关重要。现有方法仅专注于2D个体对象或3D全局场景编辑&…...
CCIG 2024:合合信息文档解析技术突破与应用前景
目录 背景当前大模型训练和应用面临的问题训练Token耗尽训练语料质量要求高LLM文档问答应用中文档解析不精准 合合信息的文档解析技术1. 具备多文档元素识别能力2. 具备版面分析能力3. 高性能的文档解析4. 高精准、高效率的文档解析文档多板式部分示例 文档解析典型技术难点元素…...
关于TeamSpeak3-网易音乐机器人的基础使用方法(胎教级教程)
本文转自博主的个人博客:https://blog.zhumengmeng.work,欢迎大家前往查看。 原文链接:点我访问 序言:在自己的ts服务器上安装了网易音乐机器人,写这篇文章旨在教群友/网友如何使用机器人!😋👍 一、TS3Audi…...
看广告赚金币提现小游戏app开发源码
开发一个看广告赚金币并可以提现的小游戏APP,源码的搭建涉及到多个方面,包括前端界面设计、后端逻辑处理、数据库管理以及广告平台的对接等。以下是一些建议的步骤和考虑因素: 前端界面设计: 使用HTML5、CSS3和JavaScript等技术…...
【vue】@、@/、../和./的区别
:表示vue语法中v-on的简写;绑定事件的专用格式。当事件触发的时候,函数才会来调用; /:在build文件夹下webpack.base.conf.js找到,便能知道代表什么了; 这里指向src文件夹 . /:表示当前目录下&…...
imx93 uboot 构建
1. 信息来源 从 nxp 的英文网站中可以找到 imx93 的构建信息,当前的最新版本为:Linux 6.6.3_1.0.0 # 网址如下: https://www.nxp.com/design/design-center/software/embedded-software/i-mx-software/embedded-linux-for-i-mx-application…...
视觉SLAM十四讲:从理论到实践(Chapter7:视觉里程计1)
前言 学习笔记,仅供学习,不做商用,如有侵权,联系我删除即可 一、目标 1.理解图像特征点的意义,并掌握在单幅图像中提取特征点及多幅图像中匹配特征点的方法。 2.理解对极几何的原理,利用对极几何的约束&…...
c++指针的*
1.*运算符 *运算符被称为间接值(indirect value)或者解除引用(dereferencing)运算符 将其应用于指针可以得到该地址处存储的值 由于 * 也有乘法的意思,c通过上下文来确定是乘法还是解除引用 2.如何声明和初始化指针 …...
快团团大团长帮卖团长团长如何获得物流查询码?
一、功能说明 团长可自行生成物流查询码,直接将码发给顾客,顾客扫码可查询自己订单的物流状态! 用户扫码后,会出现用户在该团长处下单的所有快递订单。团员可查看该订单物流信息、进行退款申请,或直接联系团长。 二…...
MySQL(二)基本SQL语句以及基本函数应用
1、基本SQL语句 MySQL中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。 - 函数应用在sql语句中 -- 临时表 select now() from dual;-- 数学函数 二进制 -- 返回x的绝对值 select a…...
fyne apptab布局
fyne apptab布局 AppTabs 容器允许用户在不同的内容面板之间切换。标签要么只是文本,要么是文本和一个图标。建议不要混合一些有图标的标签和一些没有图标的标签。 package mainimport ("fyne.io/fyne/v2/app""fyne.io/fyne/v2/container"//&…...
Python实现定时任务的方式
大家好,在当今数字化的时代,定时任务的需求在各种应用场景中频繁出现。无论是数据的定时更新、周期性的任务执行,还是特定时间点的操作触发,Python 都为我们提供了强大而灵活的手段来实现这些定时任务。当我们深入探索 Python 的世…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
