自己的学习笔记
一下内容均总结自百度或书籍,如有如有雷同请联系本人,有问题我看到了尽量回复,有错误敬请指出,我好改正。
string类
学习自:“https://blog.csdn.net/tengfei461807914/article/details/52203202”
程序可独立运行,注释是关键。
//学习链接“https://blog.csdn.net/tengfei461807914/article/details/52203202”
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main(){
char ch[]={"world!"};
cout << sizeof(ch) << endl;
string s1="Hello ",s2=ch,s("ssss");//初始化,用字符串或字符数组直接赋值或者利用构造函数直接赋值
s=s1+s2;//直接将s2接在s1后面
cout << s << endl;//输出应为“Hello world!”
cout << "length:" << s.size() << endl;//获取s的长度 不包括 '\0'
cout << "cstring:" << s.c_str() << " length:" << strlen(s.c_str()) << endl;//返回包括'\0'的字符数组
//begin(),end()
string::iterator be = s.begin(),en = s.end();//返回s的头尾迭代器
//substr
cout << "substr():" << endl;
s="012345";
int begin=0,end=3,a=0,n=1;
cout << s.substr(a) << endl;//返回从a到尾部的string类型
cout << s.substr(a,n) << " : " << s.substr(0,8) << endl;
//返回从a开始长度为n的string 如果a+n大于总长度 会抛出out_of_range异常,但运行时返回从a到尾部的string类型
//insert,返回插入后的string
cout << "insert():" << endl;
cout << s.insert(begin,s1) << endl; // 在begin处插入s1(可用cstr代替) 原begin处接到尾部s1尾部
cout << s.insert(begin,s1,a,n) << endl;//在begin处插入s1中从a开始长度为n的string
cout << s.insert(begin,"hello",n) << endl;//在begin处插入cstr从头开始的n个字符
cout << s.insert(begin,n,'a') << endl;//在begin处插入n个a
string::iterator it = s.insert(s.begin(),'a');//在迭代器处插入字符,返回一个指向插入位置的迭代器
cout << *it << endl;
it = s.insert(s.begin(),n,'b');//在迭代器处插入n个字符,返回指向插入位置的迭代器
cout << *it << endl;
it = s.insert(s.begin(),s1.begin(),s1.end());//在s.begin中插入从s1.begin()到s1.end()的字符串,返回插入位置的迭代器
cout << *it << endl;
//erase
cout << "erase():" << s << endl;
cout << s.erase(a,n) << endl;//删除s从a处开始的n个字符,返回删除后的string
it = s.erase(s.begin()+5);//删除迭代器对应位置的字符,返回删除前参数迭代器指向
cout << *it << " " << s << endl;
it = s.erase(s.begin()+1,s.end());//删除迭代器到迭代器中间的字符,不包括后迭代器指向的位置,返回删除前的s.begin()+1迭代器
cout << *it << " " << s << endl;
//append
s = s1;
cout << "append():" << endl;
cout << s.append(s2) << endl;//直接追加s2,可用cstr和形参代替
cout << s.append(s2,a,n) << endl;//追加s2第a个开始的n个字符
cout << s.append("123456",n) << endl;//追加形参的n个字符
cout << s.append(n,'.') << endl;//追加n个char
cout << s.append(be,en) << endl;//追加be迭代器到en迭代器的字符不包括en
cout << s.append(n,56) << endl;//追加n个ascll码为56的字符
s+="123";//函数重载为+
//replace,可用迭代器代替用于表示位子的数字或数字组合
s=s1;
cout << "replace():" << endl;
cout << s.replace(a,n,s2) << endl;//第a个后面的n-1个字符被s2代替,s2可用cstr和形参代替
cout << s.replace(a,n,s2,a,n) << endl;//第a个后面的n-1个字符被s2的第a个字符后面的n-1个字符代替 可不等长
cout << s.replace(a,n,"123",n) << endl;//第a个后面的n-1个字符被形参的前n个字符代替
cout << s.replace(a,n,n,'a') << endl;//第a个后面的n-1个字符被n个ch代替
//assign
cout << "assign:" << endl;
cout << s.assign(s1) << endl;//s赋值为s1 s1可用cstr和常量代替
cout << s.assign(n,'a') << endl;//s赋值n个ch
cout << s.assign(be,en) << endl;//be迭代器到en迭代器的值赋给s
//find/rfind,rfind用法同find 结果返回最后一个位置
cout << "find/rfind:" << endl;
s= s1;
cout << s.find(s1) << " " << s.find(s2) << endl;//找到s1第一次在s中出现的位置,不存在则返回结尾std::string:npos,s1可用cstr、常量和字符代替
cout << s.find(ch,a,n) << endl;//从a处开始找常量或cstr的前n个字符,返回同上
//find_of 返回同find
cout << "find_of:" << endl;
cout << s.find_first_of(s1) << endl;//找到s1中任何一个字符第一次出现的位置
cout << s.find_first_not_of(s1) << endl;//找到第一个不在s1中出现过的字符
cout << s.find_last_of(s1) << endl;//找到任何一个字符最后一次出现的位置
cout << s.find_last_not_of(s1) << endl;//找到最后一个不在s1中出现的字符 的位置
//比较与转换
s="123";
n=10;
cout << "compare and transfer:" << endl;
cout << s.compare(a,n,s1,a,n) << endl;//s从a起第n-1个字符与s1从a起底n-1个字符比较,相等为0,s>s1返回1 否则返回-1 a、n组合均可删除
cout << to_string(n) << endl;//n转化为string n支持多种类型
cout << stoi(s,0,n) << endl;//s从0开始转化为n进制 i:int l:long ul:unsigned long ll::long long ull::u longlong f::float d:double ld:long double
getchar();
return 0;
}
队列和栈的用法
网上搜索总结的,应该不涉及抄袭吧~
代码可独立运行,注释有详细说明
#include<iostream>
#include<stack>
#include<queue>
using namespace std;
void stk();
void que();
int main(){
stk();
que();
getchar();
return 0;
}
void stk(){
int a=0,n=1;
stack<int> s,s2;//声明栈
s.push(a);
cout << "stack:" << endl;
s.push(a);//栈顶压入a 无返回值
s.pop();//弹出栈顶元素 无返回值
cout << s.top() << endl;//返回栈顶元素 不会删除栈顶元素 注意判断是否为空
cout << s.empty() << endl;//判断是否为空栈 空栈返回true
cout << s.size() << endl;//返回栈中元素个数
s.emplace(a);//栈顶加入元素,可直接写构造函数参数 内部构造,如下 队列同理
stack<string> s1;
s1.emplace(3,'a');
cout << s1.top() << endl;
s.swap(s2);//交换两个栈的内容,队列同理
}
void que(){
queue<int> q,q2;//声明队列
int a=0;
q.push(a);
q2.push(a);
cout << "queue:" << endl;
q.push(a);//队尾增加元素
q.emplace(a);//队尾增加元素,可直接写对象的构造函数参数,在内部构造
q.pop();//删除队首元素
cout << q.empty() << endl;//判断是否为空队列 空队列返回true
cout << q.size() << endl;//返回队列元素个数
cout << q.front() << endl;//返回队首元素
cout << q.back() << endl;//返回队尾元素
q.swap(q2);//交换q和q2
}
迭代器iterator用法
话不多说,看代码和注释,可独立运行。
#include<iostream>
#include<stack>
#include<queue>
using namespace std;
void stk();
void que();
int main(){
stk();
que();
getchar();
return 0;
}
void stk(){
int a=0,n=1;
stack<int> s,s2;//声明栈
s.push(a);
cout << "stack:" << endl;
s.push(a);//栈顶压入a 无返回值
s.pop();//弹出栈顶元素 无返回值
cout << s.top() << endl;//返回栈顶元素 不会删除栈顶元素 注意判断是否为空
cout << s.empty() << endl;//判断是否为空栈 空栈返回true
cout << s.size() << endl;//返回栈中元素个数
s.emplace(a);//栈顶加入元素,可直接写构造函数参数 内部构造,如下 队列同理
stack<string> s1;
s1.emplace(3,'a');
cout << s1.top() << endl;
s.swap(s2);//交换两个栈的内容,队列同理
}
void que(){
queue<int> q,q2;//声明队列
int a=0;
q.push(a);
q2.push(a);
cout << "queue:" << endl;
q.push(a);//队尾增加元素
q.emplace(a);//队尾增加元素,可直接写对象的构造函数参数,在内部构造
q.pop();//删除队首元素
cout << q.empty() << endl;//判断是否为空队列 空队列返回true
cout << q.size() << endl;//返回队列元素个数
cout << q.front() << endl;//返回队首元素
cout << q.back() << endl;//返回队尾元素
q.swap(q2);//交换q和q2
}