C++学习笔记

自己的学习笔记

一下内容均总结自百度或书籍,如有如有雷同请联系本人,有问题我看到了尽量回复,有错误敬请指出,我好改正。

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
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值