C++ 标准程序库std::string 详解

2023-05-16

  • 现在一般不再使用传统的char*而选用C++标准程序库中的string类,是因为string标准程序和char*比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,集成的操作函数足以完成大多数情况下(甚至是100%)的需要。比如,可以用 = 进行赋值操作,== 进行比较,+ 做串联。尽可以把它看成是C++的基本数据类型。C++是将面向过程的C语言和面向对象的Java语言拼接到一起而组成的一种高级语言。
  • 标准模板库(STL)提供了一个std::string类,其是std::basic_string的一个特化,它是一个容器类,可把字符串当作普通类型来使用,并支持比较、连接、遍历、STL算法、复制、赋值等等操作,这个类定义在<string>头文件中。
  • #include <string> //注意这里不是string.h string.h是C字符串头文件

1.声明一个C++字符串
std::string类的构造函数

  • 声明一个字符串变量很简单:string Str;
  • 这样就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把Str初始化为一个空字符串。
  • String类的构造函数和析构函数如下:

a) string s(); //生成一个空字符串s
b) string s(str) //拷贝构造函数 生成str的复制品string(const string& str)
c) string s(str,stridx) //将字符串str内"始于位置stridx"的部分当作字符串的初值
d) string s(const string& str, size_type pos,strlen) //将字符串str内"始于pos且长度顶多strlen"的部分作为字符串的初值
e) string s(const char *C) //将C字符串作为s的初值
f) string s(const char* str, size_type n) //使用字符串str的前n个字符初始化作为字符串s的初值。
g) string s(int num,char c) //生成一个字符串,包含num个c字符
h) string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值
i) s.~string() //销毁所有字符,释放内存
当构造的string太长而无法表达时会抛出length_error异常


2.字符串操作函数
这里是C++字符串的重点,先把各种操作函数罗列出来,不喜欢把所有函数都看完的人可以在这里找自己喜欢的函数,再到后面看他的详细解释。
a) =,assign() //赋以新值
b) swap() //交换两个字符串的内容
c) +=,append(),push_back() //在尾部添加字符
d) insert() //插入字符
e) erase(int nStart,int nEnd) //删除nStart—nEnd位置字符
f) clear() //删除全部字符
g) replace() //替换字符
h) + //串联字符串
i) ==,!=,<,<=,>,>=,compare() //比较字符串
j) size(),length() //返回字符数量
k) max_size() //返回字符的可能最大个数
l) empty() //判断字符串是否为空
m) capacity() //返回重新分配之前的字符容量
n) reserve() //保留一定量内存以容纳一定数量的字符
o) [ ], at() //存取单一字符
p) >>,getline() //从stream读取某值
q) << //将谋值写入stream
r) copy() //将某值赋值为一个C_string
s) c_str() //将内容以C_string返回
t) data() //将内容以字符数组形式返回
u) substr() //返回某个子字符串
v)查找函数
w)begin() end() //提供类似STL的迭代器支持
x) rbegin() rend() //逆向迭代器
y) get_allocator() //返回配置器
下面详细介绍:

2.1 C++字符串和C字符串的转换
C ++提供的由C++字符串得到对应的C_string的方法是使用data()、c_str()和copy(),其中,data()以字符数组的形式返回字符串内容,但并不添加’\n’。c_str()返回一个以‘\n’结尾的字符数组,而copy()则把字符串的内容复制或写入既有的c_string或字符数组.

2.2 大小和容量函数
一个C++字符 串存在三种大小:

  • 现有的字符数,函数是size()和length(),他们等效。Empty()用来检查字符串是否为空。
  • max_size() 这个大小是指当前C++字符串最多能包含的字符数,很可能和机器本身的限制或者字符串所在位置连续内存的大小有关系。不够用的话,会抛出length_error异常
  • capacity()重新分配内存之前 string所能包含的最大字符数。这里另一个需要指出的是reserve()函数,这个函数为string重新分配内存。重新分配的大小由其参数决定, 默认参数为0,这时候会对string进行非强制性缩减。

还有必要再重复一下C++字符串和C字符串转换的问题,许多人会遇到这样的问题,自己做的程序要调用别人的函数、类什么的(比如数据库连接函数Connect(char*,char*)),但别人的函数参数用的是char*形式的,而我们知道,c_str()、data()返回的字符数组由该字符串拥有,所以是一种const char*,要想作为上面提及的函数的参数,还必须拷贝到一个char*,如果 此函数对参数(也就是char*)的内容不修改的话,可以进行强制类型的转换,比如Connect((char*)UserID.c_str(), (char*)PassWD.c_str()),但是这时候是存在危险的,因为这样转换后的字符串其实是可以修改的,所以强调除非函数调用的时候不对参数进行修改,否则必须拷贝到一个char*上去。当然,更稳妥的办法是无论什么情况都拷贝到一个char*上去。

2.3元素存取

  • 可以使用下标操作符[]和函数at()对元素包含的字符进行访问。但是应该注意的是操作符[]并不检查索引是否有效(有效索引0~str.length()),如果索引失效,会引起未定义的行为。而at()会检查,如果使用 at()的时候索引无效,会抛出out_of_range异常。
  • 有一个例外不得不说,const string a;的操作符[]对索引值是a.length()仍然有效,其返回值是’’。其他的各种情况,a.length()索引都是无效的。举例如下:
const string Cstr("const string");
string Str("string");

Str[3]; //ok
Str.at(3); //ok

Str[100]; //未定义的行为
Str.at(100); //throw out_of_range

Str[Str.length()] //未定义行为
Cstr[Cstr.length()] //返回 ‘’
Str.at(Str.length());//throw out_of_range
Cstr.at(Cstr.length()) throw out_of_range


我不赞成类似于下面的引用或指针赋值:
char& r=s[2];
char* p= &s[3];
因为一旦发生重新分配,r,p立即失效。避免的方法就是不使用。

2.4比较函数
C ++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较(如 str<"hello")。在使用>,>=,<,<=这些操作符的时候是根据"当前字符特性"将字符按字典顺序进行逐一得 比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。同时,string ("aaaa") <string(aaaaa)。
另一个功能强大的比较函数是成员函数compare()。他支持多参数处理,支持用索引值和长度定位子串来进行比较。他返回一个整数来表示比较结果,返回值意义如下:0-相等 >0-大于 <0-小于。举例如下:
string s("abcd");

s.compare("abcd"); //返回0
s.compare("dcba"); //返回一个小于0的值
s.compare("ab"); //返回大于0的值

s.compare(s); //相等
s.compare(0,2,s,2,2); //用"ab"和"cd"进行比较 小于零
s.compare(1,2,"bcx",2); //用"bc"和"bc"比较。

2.5 更改内容
这在字符串的操作中占了很大一部分。
首先讲赋值,第一个赋值方法当然是使用操作符=,新值可以是string(如:s=ns) 、c_string(如:s="gaint")甚至单一字符(如:s=’j’)。还可以使用成员函数assign(),这个成员函数可以使你更灵活的对字符串赋值。还是举例说明吧:
s.assign(str); //不说
s.assign(str,1,3);//如果str是"iamangel" 就是把"ama"赋给字符串
s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给s
s.assign("gaint"); //不说
s.assign("nico",5);//把’n’ ‘I’ ‘c’ ‘o’ ‘’赋给字符串
s.assign(5,’x’);//把五个x赋给字符串
把字符串清空的方法有三个:s="";s.clear();s.erase();
string提供了很多函数用于插入(insert)、删除(erase)、替换(replace)、增加字符。
先说增加字符(这里说的增加是在末尾上),函数有 +=、append()、push_back()。举例如下:
s+=str;//加个字符串
s+="my name is jiayp";//加个C字符串
s+=’a’;//加个字符

s.append(str);
s.append(str,1,3);//不解释了 同前面的函数参数assign的解释
s.append(str,2,string::npos)//不解释了

s.append("my name is jiayp");
s.append("nico",5);
s.append(5,’x’);
2.5.1、在字符串结尾插入其他元素。
s.push_back(‘a’);//这个函数只能增加单个字符 对STL熟悉的理解起来很简单
2.5.2、 在指定位置插入字符串或字符。

也许你需要在string中间的某个位置插入字符串,这时候你可以用insert()函数,这个函数需要你指定一个安插位置的索引,被插入的字符串将放在这个索引的后面。
s.insert(0,"my name");
s.insert(1,str);
这种形式的insert()函数不支持传入单个字符,这时的单个字符必须写成字符串形式。为了插 入单个字符,insert()函数提供了两个对插入单个字符操作的重载函数:insert(size_type index,size_type num,chart c)和insert(iterator pos,size_type num,chart c)。其中size_type是无符号整数,iterator是char*,所以,你这么调用insert函数是不行的:insert(0,1, ’j’);这时候第一个参数将转换成哪一个呢?所以你必须这么写:insert((string::size_type)0,1,’j’)!第二种形式指出了使用迭代器安插字符的形式,在后面会提及。顺便提一下,string有很多操作是使用STL的迭代器的,他也尽量做得和STL靠近。
删除函数erase()的形式也有好几种,替换函数replace()也有好几个。举例吧:
string s="il8n";
s.replace(1,2,"nternationalizatio");//从索引1开始的2个替换成后面的C_string

2.5.3、 删除字符串的某一部分。
s.erase(13);//从索引13开始往后全删除
s.erase(7,5);//从索引7开始往后删5个

2.6提取子串和字符串连接
提取子串的函数是:substr(),形式如下:
s.substr();//返回s的全部内容
s.substr(11);//从索引11往后的子串
s.substr(5,6);//从索引5开始6个字符
把两个字符串结合起来的函数是+。
2.7输入输出操作
1.>> 从输入流读取一个string。
2.<< 把一个string写入输出流。
另一个函数就是getline(),他从输入流读取一行内容,直到遇到分行符或到了文件尾。

2.8搜索与查找

std::string类的查找函数
查找函数很多,功能也很强大,包括了:
find()
rfind()
find_first_of()
find_last_of()
find_first_not_of()
find_last_not_of()
这些函数返回符合搜索条件的字符区间内的第一个字符的索引,没找到目标就返回npos。所有的函数的参数说明如下:
第一个参数是被搜寻的对象。第二个参数(可有可无)指出string内的搜寻起点索引,第三个参数(可有可无)指出搜寻的字符个数。最后再说说npos的含义,string::npos的类型是string::size_type,所以,一旦需要把一个索引与npos相比,这个索引值必须是string::size)type类型的,更多的情况下,我们可以直接把函数和npos进行比较(如:if(s.find("jia")== string::npos))。

3.1、使用STL算法

std::string name = "marius";// 使字符串全为大写

std::transform(name.begin(), name.end(), name.begin(),toupper);

std::string name = "marius";

// 升序排列字符串

std::sort(name.begin(), name.end());

std::string name = "marius";

// 反转字符串

std::reverse(name.begin(), name.end());

bool iswhitespace(char ch)

{

return  ch == ' ' || ch == 't' || ch == 'v' ||

ch == 'r' || ch == 'n';

}

std::string name = " marius  ";

// 删除空白字符

std::string::iterator newend = std::remove_if(name.begin(), name.end(), iswhitespace);

name.erase(newend);

std::string类的替换函数

函数1:
std::string & replace(size_type pos1, size_type n1, const std::string & str, size_type pos2 = 0, size_type n2 = npos);

该函数的作用:使用str字符串从位置pos2开始的n2个字符,替换当前字符串从pos1位置开始处的n1个字符。
可以这样理解:该函数将当前字符串从pos1开始的n1个字符全部删除,然后再用str整个字符串或者str从pos2开始的n2个字符,从pos1位置开始填入到当前字符串中。

提醒:如果n1或者n2的数值超出了对应字符串的长度,以实际长度为准,不会出现访问越界的情况。

注意:
a、如果pos1指定的位置超出当前字符串的范围,抛出std::out_of_range异常,不捕捉将导致coredump。
b、如果pos2指定的位置超出替换字符串str的范围,抛出std::out_of_range异常,不捕捉将导致coredump。

函数2:
std::string& replace(size_type pos, size_type n1, const char * s, size_type n2);

该函数的作用:使用字符串s的前n2个字符,替换当前字符串从pos位置开始处的n1个字符。
可以这样理解:函数将当前字符串从pos开始的n1个字符全部删除,然后再用字符串s的前n2个字符填入到当前字符串中。类似于函数1的pos2等于0,必须指定n2的这种情况,但也有一点的差别,下面会注意里描述这种差别。
注意:
a、如果pos指定的位置超出当前字符串的范围,抛出std::out_of_range异常,不捕捉将导致coredump。
b、该函数不会判断字符串s和n2的大小关系,它严格地从s起始处拷贝n2个字符到指定位置。如果n2表示的长度超出了s的范围,它会读取s后面的内存空间,有可能会因为内存访问越界而coredump。但函数1的n2可以超出范围,它以实际长度为准。

函数3:
std::string& replace(size_type pos, size_type n1, const char* s);

该函数的作用:使用以''为结尾的字符串s,替换当前字符串从pos位置开始处的n1个字符。
可以这样理解:函数将当前字符串从pos开始的n1个字符全部删除,然后再用字符串s从开始到以''结束的所有字符,从pos位置开始填入到当前字符串中。

注意:如果pos指定的位置超出当前字符串的范围,抛出std::out_of_range异常,不捕捉将导致coredump。

函数4:
std::string& replace(size_type pos, size_type n1, size_type n2, char c);

该函数的作用:使用n2个c表示的字符,替换当前字符串从pos位置开始处的n1个字符。
可以这么理解:函数将当前字符串从pos开始的n1个字符全部删除,然后再用n2个c字符,从pos位置开始填入到当前字符串中。

注意:如果pos指定的位置超出当前字符串的范围,抛出std::out_of_range异常,不捕捉将导致coredump。

函数5:
std::string& replace(iterator i1, iterator i2, const std::string& str);

该函数的作用:使用字符串str,替换当前字符串[i1,i2)之间的字符。

函数6:
std::string& replace(iterator i1, iterator i2, const char* s, size_type n);

该函数的作用:使用字符串s的前n个字符,替换当前字符串[i1,i2)之间的字符。

函数7:
std::string& replace(iterator i1, iterator i2, const char* s);

该函数的作用:使用以''结尾的字符串s,替换当前字符串[i1,i2)之间的字符。

函数8:
std::string& replace(iterator i1, iterator i2, size_type n, char c);

该函数的作用:使用n个c表示的字符,替换当前字符串[i1,i2)之间的字符。

std::string类的内部类型定义

typedef traits traits_type;

typedef typename traits::char_type value_type;

typedef size_t size_type;

typedef Allocator allocator_type;

typedef ptrdiff_t difference_type;

typedef Allocator allocator_type;

typedef Allocator allocator_type;

typedef Allocator allocator_type;

typedef charT& reference; typedef const charT& const_reference; typedef charT* pointer; typedef const charT* const_pointer; typedef pointer iterator; typedef const_pointer const_iterator; typedef ::reverse_iterator reverse_iterator; typedef ::reverse_iterator const_reverse_iterator; static const size_type npos = static_cast(-1);

std::string类的赋值运算符

string& operator= (const char* s);
string& operator= (char c);
string& operator+= (const string& rhs);
string& operator+= (const char* s);
string& operator+= (char c);
string operator+ (const string & lhs, const string & rhs);
string operator+ (const char* lhs, const string & rhs);
string operator+ (char lhs, const string & rhs);
string operator+ (const string & lhs, const char* rhs);
string operator+ (const string & lhs, char rhs);

std::string类的逻辑运算符

bool operator== (const string & lhs, const string & rhs);
bool operator== (const char* lhs, const string & rhs);
bool operator== (const string & lhs, const char* rhs);
bool operator!= (const string & lhs, const string & rhs);
bool operator!= (const char* lhs, const string & rhs);
bool operator!= (const string & lhs, const char* rhs);
bool operator< (const string & lhs, const string & rhs);
bool operator< (const char* lhs, const string & rhs);
bool operator< (const string & lhs, const char* rhs);
bool operator> (const string & lhs, const string & rhs);
bool operator> (const char* lhs, const string & rhs);
bool operator> (const string & lhs, const char* rhs);
bool operator<= (const string & lhs, const string & rhs);
bool operator<= (const char * lhs, const string & rhs);
bool operator<= (const string & lhs, const char * rhs);
bool operator>= (const string & lhs, const string & rhs);
bool operator>= (const char* lhs, const string & rhs);
bool operator>= (const string & lhs, const char* rhs);
istream& operator >> (istream&, string &);
ostream& operator << (ostream&, const string &);
istream& getline (istream&, string &, char delim = 'n');

参考链接

  • https://en.cppreference.com/w/cpp/string/basic_string
  • https://en.cppreference.com/w/cpp/string/basic_string/basic_string
  •  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 标准程序库std::string 详解 的相关文章

  • boost::algorithm::join 的一个很好的例子

    我最近想用提升 算法 加入 http www boost org doc libs 1 41 0 doc html string algo reference html header boost algorithm string join
  • 如何在 Ruby on Rails 中不使用 eval 将字符串转换为哈希值? [复制]

    这个问题在这里已经有答案了 这里是string需要转换成hash status gt label gt Status collection gt return misc definitions project status 我们不能使用ev
  • 从 PHP 中的字符串中删除转义序列

    我正在使用一个已转义字符序列的 mysqldump 文件 我需要知道字符串的长度作为其数据库值 但转储中包含转义字符 这会增加字符串的长度 我用过stripslashes 它正确地取消转义单引号和双引号 但它不会触及 r n 我担心其中还有
  • C# 中单个 & 符号的第二个含义是什么?

    我在 C 中使用了单个与号 来表示 检查second条件语句即使第一个是false 但以下似乎是不同的意思 of 总而言之 谁能解释一下如何i 1在下面的例子中有效吗 List
  • 为什么 Java 11 中对于空白字符串 String.strip() 比 String.trim() 快 5 倍

    我遇到过一个有趣的场景 因为某些原因strip 针对空白字符串 仅包含空格 明显快于trim 在Java 11中 基准 public class Test public static final String TEST STRING 3 w
  • 如何成功地用 XML 中的批处理替换文本

    我尝试使用批处理在 XML 页面中替换字符串 但无法成功完全替换它 我有这个批处理代码 echo off setlocal EnableDelayedExpansion set search logLevel 3 set replace l
  • 如何在 xslt 2.0 中解析字符串到日期

    是否可以像这样转换字符串30042013 2013 年 4 月 30 日 日期格式 所以我可以稍后在类似的函数中使用它format date 就像托马拉克说的 你可以使用substring and concat 要构建一个字符串 您可以将其
  • NHibernate 获取 & 字符串 Id

    我在 NHibernate 上有一个分配了字符串 Id 的实体 并且在通过 Id 获取实体时遇到了一些问题 例子 假设有这样的数据库记录 Id Description AAA MyDescription 现在 如果我使用搜索 ID aaa
  • 使用 Java 将摩尔斯电码转换为英文文本

    我最近有一项任务 将英语转换为摩尔斯电码 并将摩尔斯电码转换为英语 输入莫尔斯电码时 我的老师希望各个字母之间用 1 个空格分隔 单词之间用 分隔 例如 是 成为 我能够完美地将英语转换为莫尔斯电码 但我对莫尔斯电码转换为英语感到不知所措
  • 为什么在 C# 中使用 String.Concat()?

    我想知道这个问题有一段时间了 为什么使用String Concat 而不是使用 操作员 我明白了String Format因为它是一个空洞使用 运算符并使您的代码看起来更好 例如 string one bob string two jim
  • 生成逗号分隔值

    假设我有一个字符串集合 foo bar xyz 我想从列表中生成一个逗号分隔的值 如下所示 foo bar xyz 请注意末尾缺少 我知道有多种方法可以生成此内容 使用 for 循环和 string Format 或 StringBuild
  • 拆分/标记化/扫描字符串并注意引号

    Java中是否有默认 简单的方法来分割字符串 但要注意引号或其他符号 例如 给定以下文本 There s a man that live next door in my neighborhood and he gets me down Ob
  • char 数组声明中字符串文字周围的大括号有效吗? (例如 char s[] = {"Hello World"})

    偶然间我发现这条线char s Hello World 已正确编译并且似乎被视为相同char s Hello World 不是第一个 Hello World 一个包含一个 char 数组元素的数组 因此 s 的声明应为char s 事实上如
  • 如何在 R 中将字符串解析为层次结构或树

    有没有办法将表示组的字符串解析为 R 中的层次结构 假设我的小组结构如下 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 3 1 1 3 1 1 1 3 2 1 1 3 3 1 2 1 2 1 1 2 1 1 1 2 1 2 1
  • 静态字符串文字表?

    在 C 中创建全局静态字符串表的正确方法是什么 我所说的 全局 是指 可从包含标头的任何文件中使用 但不是某些运行时创建的单一对象的一部分 我所说的 静态 是指 尽可能少地设置运行时间 只读内存页中的数据 每个应用程序只有 1 个数据实例
  • 获取两个字符串之间的公共部分c# [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要的是获取两个单词之间的共同部分并获取差异 例子 场景1 word1 感言 word2 Test 将返回 公共部分Test 不同之
  • std::bind 重载解析

    下面的代码工作正常 include
  • string.Compare 行为

    怎么会这样呢 这是从VS2008中的立即窗口获取的 string Compare 1 string Compare 0 0 1 从言论来看字符串比较 http msdn microsoft com en us library 84787k2
  • 如何将字符串日期转换为 NSDate?

    我想转换字符串 2014 07 15 06 55 14 198000 00 00 to an NSDate在斯威夫特 尝试这个 let dateFormatter NSDateFormatter dateFormatter dateForm
  • 字符串池可以包含两个具有相同值的字符串吗? [复制]

    这个问题在这里已经有答案了 字符串池可以包含两个具有相同值的字符串吗 String str abc String str1 new String abc Will the second statement with new operator

随机推荐

  • 完美解决 开机无法启动 提示0xc000000e 问题

    完美解决 开机无法启动 提示0xc000000e 问题 原文链接 xff1a http bbs ruanmei com thread 186874 1 1 html 摘要 xff1a 本文提供0xc000000e问题的解决方法和原理解释 x
  • 使用Jmeter输出错误响应结果到日志

    性能测试过程中 xff0c 我们经常需要知道高并发性能测试情况下 xff0c 系统报错 xff0c 返回的结果是什么 xff0c 帮助开发具体定位问题 一 操作步骤 xff1a 正确响应结果 我们可以自定义断言语句 xff0c 自动判断断言
  • 控制台报错 index:0,size:0

    源代码 xff1a service实现类 xff1a String select sql 61 34 select cguid case isrz when 1 then 39 PASS 39 when 0 then 39 FAIL 39
  • Ubuntu11.04上tftp服务的配置

    Ubuntu11 04 上tftp 服务的配置 2011 06 17 15 01 以前ubuntu 版本上的tftp 已经配置很多遍了 xff0c 详情可以参见 xff1a www mcuos com thread 646 1 2 html
  • 九套常规报表模型(转)

    九套常规报表模型 我们可以通过九大报表模型的组合 xff0c 快速完成大多数报表的设计 这九大模型分别为 xff1a 列表 分组 主从 嵌套 交叉 图形 套打 分栏 填报 本文将重点对这九大模型的特征及适用范围进行阐述 1 列表 列表是报表
  • 利用for循环打印实心棱形和空心棱形

    一 要求 xff1a 提示用户输入棱形的行数 xff0c 比如输入5时 xff0c 打印如下实心棱形和空心棱形 xff08 由于排版问题 xff0c 可能显示会有变形 xff09 xff1a 二 分析 xff1a A 图形是上下对称的 B
  • Faiss教程:GPU

    Fassi通过CUDA支持GPU xff0c 要求3 5以上算力 xff0c float16要求CUDA7 5 43 通过index gpu to cpu可以将索引从GPU复制到CPU xff0c index cpu to gpu 和 in
  • 浏览器的强缓存与弱缓存

    在浏览器众多缓存中的HTTP缓存可能很多人对这个的概念并没有很清晰 xff0c 每个人都知道进入一次网页之后再刷新一次页面 xff0c 加载速度会比首次加载快非常多 xff0c 每个人都知道这是浏览器缓存的magic xff0c 但是对此背
  • 密钥协商(密钥交换)机制的讲解

    国标文件涉及密钥协商算法的函数 生成密钥协商参数并输出计算会话密钥产生协商数据并且计算会话密钥 密钥协商 xff08 交换 xff09 算法及其原理 密钥交换 协商目的 密钥协商机制 是 xff1a xff08 在身份认证 的前提下 xff
  • 基于牛客网Js v8引擎提供的读/写方法做的调试页面

    项目地址 正直秋招季 xff0c 对找工作的人来说 xff0c 牛客网肯定不陌生 xff0c 现在很多大型互联网公司的在线笔试都是在牛客网上面进行的 xff08 好像有打广告的嫌疑 xff09 Js有那么多的操作数据结构的api xff0c
  • 本地调试spark报org.apache.hadoop.io.nativeio.NativeIO$Windows.createFile...

    本地调试spark xff0c saveAsText 报错 org apache hadoop io nativeio NativeIO Windows createFileWithMode0 Ljava lang String xff1b
  • Element表格分页数据选择+全选所有完善批量操作

    后台管理系统中的列表页面 xff0c 一般都会有对列表数据进行批量操作的功能 xff0c 例如 xff1a 批量删除 批量删除等 之前项目中只是简单的用到Element框架中常规的属性 事件 在一次机缘巧合下 xff0c 了解到一个公司内部
  • idea本地调试web报“There is no configured/running web-servers found! Please, run any web-config”...

    为什么80 的码农都做不了架构师 xff1f gt gt gt 本文永久更新地址 xff1a https my oschina net bysu blog 3051091 1 按照网上的各种配置 如下图 还是不行 2 网上还说要先run才行
  • Visual Studio Code语言设置为中文

    1 Visual Studio Code下载安装 https code visualstudio com 2 语言设置 2 1 快捷键 Windows Linux 快捷键是 xff1a ctrl 43 shift 43 p macOS 快捷
  • 查看zookeeper注册中心是否有注册服务

    为什么80 的码农都做不了架构师 xff1f gt gt gt 查看zookeeper注册中心是否有注册服务可以在服务器上看 xff0c 也可以在dubboadmin看哦 1 在服务器上看 xff1a 1 xff09 查找zookeeper
  • matplotlib 设置图形大小时 figsize 与 dpi 的关系

    matplotlib 中设置图形大小的语句如下 xff1a fig 61 plt figure figsize 61 a b dpi 61 dpi 其中 xff1a figsize 设置图形的大小 xff0c a 为图形的宽 xff0c b
  • iOS- SQLite3的基本使用

    iOS 简单说说iOS移动客户端SQLite3的基本使用 1 为什么要使用SQLite3 xff1f 大量数据需要存储 管理数据 xff0c 存储数据 SQLite是一种关系型数据库 xff08 也是目前移动客户端的主流数据库 xff09
  • Daily Scrum: 2012/12/8

    成员角色今天工作明天计划王安然PM Dev已请假 xff0c 开会 继续开会 黄杨PM Dev已收拾skynet的小问题并且通过测试 xff08 312 xff09 xff0c 编写武器项cracker xff08 313 xff09 完成
  • 【Python】控制鼠标点击

    from pymouse import PyMouse m 61 PyMouse a 61 m position 获取当前坐标的位置 print a m move 50 500 鼠标移动到 x y 位置 a 61 m position pr
  • C++ 标准程序库std::string 详解

    现在一般不再使用传统的char 而选用C 43 43 标准程序库中的string类 xff0c 是因为string标准程序和char 比较起来 xff0c 不必担心内存是否足够 字符串长度 等等 xff0c 而且作为一个类出现 xff0c