字符串string
- substr操作:
string s("lewis");
//返回一个string 包含s中从pos开始的n个字符的拷贝 默认0-s.size()
s.substr(pos,n);
- 改变string的方法:
string s("lewis");
s.insert(pos,args); //在pos之前插入 注意这里pos使用下标,使用迭代器会报错。
s.erase(pos,len); //从pos开始删除
s.assign(args); //使用args的内容替换s原本的字符串 返回的是s的引用
s.append(args);
s.replace(range,args) //range是一个下标和一个长度,或者是s的一对迭代器
//args 可以是字符串str
// 也可以是str,pos,len
// cp,(len)
// n,c n个字符c
// b,e 一对迭代器
//可以说非常的灵活了
- string和数值之间的转换:
to_string(val);//把值val转换为字符串,val可以是任意算术类型
stoi(s,p,b); //返回s的起始子串(表示整数内容)的数值,b是转换用的基数,默认是10,p是size_t指针,用来保存s中第一个数字的下标,p默认0即不保存下标
stol(s,p,b);
stof(s,p,b); //l:long f: float d:double
stod(s,p,b);
关联容器 set map
- 判断要处理的元素是否已经存在于set中:
c.find(k);//返回一个迭代器,指向第一个关键字为k的元素,若k不在容器中,则返回迭代器 ==c.end()
c.count(k);//返回关键字等于k的元素的数量 ==0则set为空
c.equal_range(k);//返回一个迭代器的pair,表示关键字等于k的元素的范围,若k不存在,pair的两个成员均等于c.end()
- 对map操作 下标和find 灵活选用
map<string,int>word_cnt;
word_cnt["hello"];//使用下标运算符的时候,如果"hello"不在map中 会使用值初始化给对应这里的int一个初值0
word_cnt.find("hello");//这里则会返回尾后迭代器,不会自动生成hello的map
控制输出位数
#include<iomanip> //需要包含此头文件
cout << "a=" << setprecision(2) << a <<endl;//a=0.2124 会输出0.2
//如果想要保留小数点后几位:
cout.setf(ios::fixed); //对不够的位数进行补零
cout << "a=" <<fixed<< setprecision(2) << a <<endl; //输出a=0.20
cout.unsetf(ios::fixed); //取消补领
cout<<fixed<<setprecision(2)<<a<<endl; //输出 0.2 不补零
灵活使用ceil() floor() 向上取整,向下取整
int a=2;
cout<<a/3<<endl;
cout<<ceil(a/3)<<endl;
cout<<ceil((a+0.0)/3)<<endl;
cout<<floor((a+0.0)/3)<<endl;
>>>0
>>>0
>>>1
>>>0
千万记住要保持运算数值间的类型统一!! 尤其设计int 和 long时
vector<long long>value;
//在使用accumulate求和时
if(accumulate(value.cbegin(),value.cend(),0))
cout<<"wrong!"<<endl;
//因为value里是long long 而求和的初值0是int类型,所以必须使用0LL 常见的还有0L 0F 0D
if(accmulate(value.cbegin(),value.cend(),0LL))
cout<<"right" <<endl;