1) <fstream>
输入输出流的效率是竞赛中应该引起重规的问题, 当输入输出数据量较大时, 建议改用<cstdio>, 避免因为输入输出的效率低下寻致TLE.
a. 输入输出流
·ifstream fin(""); ofstream fout("");
·f(); //读取到流中最后的文件结束符时返回非0.
·if (fin >> a) //一种更好的判断文件结束的方法
b. 设置输出的宽度及对齐格式
·fout.width(8); //只有接下来一个输出数据按宽度8输出,未设置情况下左补空格
·Fout.fill('0'); //空位填充字符‘0'.不能是字符串“”…””
·fout.setf(ios::left); // left在指定的域宽内按左对齐输出, right按右对齐输出, internal使数值
的符号按左对齐, 数值本身按右对齐输出. 域宽内剩余的字符位置用填充符填充. 缺省为right设置. 在任一时刻只有一种有效.
c. 设置输出的浮点精度及符号
·fout.setf(ios::fixed | ios::showpoint); //并强制输出小数部分,并保留六位小数
·fout.setf(ios::showpoint); //强制输出小数部分,并保留6位有效数字
·fout.setf(ios::scientific); //为科学计数法输出
·fout.precision(N); //fixed设置下表示输出N位小数, scientific设置下表示输出N位有效数字.
·fout.setf(ios::showbase); //设置对应标志后使数值输出的前面加上"基指示符". 八进制数的基指示符为数字0, 十六进制数的基指示符为0x, 十进制数没有基指示符. 缺省为不设置, 即在数值输出的前面不加基指示符.
·fout.setf(ios::uppercase); //使输出的十六进制数和浮点数中使用的字母为大写. 缺省为不设置, 即输出的十六进制数和浮点数中使用的字母为小写.
·cin (cout)<< hex << … //使后面输出的数据均为十六进制,oct为八进制,没有dex十进制。不输入输出进制格式则默认为十进制。后面不能再跟进制格式设置,需要在另一个输入输出语句中设置。
2) <string>
(以下string.……,这样形式的,string是字符串变量,不是“string”
·string可以用string(size_t n, char c)构造包含n个字符cstring.
·String支持的运算符有"+", "=", "==""[ ]". "+""="两种运算符都可以在char, char*, stringstring之间使用. "=="运算符在char*, stringstring之间使用, 返回一个bool. "[ ]"运算符返回string中某位置的字符的引用.
(1)String的定义操作
String.assign(str)//可将string, charchar*的数据存入string.
String.assign(str2,a,b) //表示将str2字符串中从第a个字符起b个字符复制给string.起始位置
0.这里a被称为索引位置
string.assign(str,a,string::npos) //str中从第2个索引位置开始到最后都赋给string
string.assign(“…”) //相当于string += “…”;
  String.assign(“…”a) //表示将给定字符串(要自己输入,而非变量)中前a个字符都赋给string
  string.assign(int n,char c) //用法同string(size_t, char c)
  (2)string的拼接操作
  String.append(str) //str接在string后,相当于string += str;
    String.append(str,a,b) //效果类似string.assign(str,a,b),应该能理解吧
    String.append(str,a,string::npos) //效果类似string.assign(str,a,string::npos).
    String.append(“…”) //效果类似string.assign(“…”).
    String.append(“…”,a) //效果类似string.assign(“…”,a)
  String.append(int n,char c) //效果类似string.assign(int n, char c);
  附注: append,assign后面括号内只能是字符串参数,若要用字符参数,则要用string.push_back(char c)函数。
(3)string的询问操作
  String.size()string.length(); //返回值是string的长度.
  String.max_size(); //返回string最多可放的字符数
(4)string的插入操作
    String.insert(int point,str) //在索引位置point处插入字符串Str
    String.insert(int start, int num, char c); //从索引位置start开始插入numc字符。
(5)string的清空操作
string=””; //最直接的最方便的方式,不过是全部清空
string.clear(); //屠杀式的清空
ase(); //clear()一样,没有人情味
ase(int point); //从索引位置point开始,删除后面全部
ase(int start, int n); //c++string类型从索引位置start开始,删除后面n个字符
(6)string的替换操作
    place(int point, int num, str); //从索引位置point开始的num个字符替换成str
    place(int p1, int n1, str, int p2, int n2); //string中索引位置p1开始的num个字符替换成str中从索引位置p2起的n2个字符.
    place(int p, int n, char* c, int m); //string中索引位置pn个字符替换成c中前m个字符
    place(int p, int n, int m, char c); //string中索引位置pn个字符替换成m个字符c
    String.swap(str); //交换stringstr
(7)string的取串操作
    String.substr(); //取全部
    String.substr(int point); //string中从索引位置point起后面所有的字符
    String.substr(int start, int n); //string中从索引位置start起后面n个字符
py(char* s, int start, int n)l; //复制从s中从索引位置pos开始的n个字符(如果到字符串结尾则不再复制)string, 返回值为实际copy了的字符数.
(8)string的查操作
    String.find(str); //查串strstring中第一次出现的索引位置
    String.rfind(str); //反向查
    String.find_first_of(str); //查包含str字串中的任何字符,返回第一个位置
    String.find_first_not of (str); //查不包含str字串中的任何字符,返回第一个位置
    String.find_last_of(str); //查包含str字串中的任何字符,返回最后一个位置
    String.find_last_not_of(str); //查不包含str字串中的任何字符,返回最后一个位置
    附注: string::find()的第一个参数是模式串, 数据类型可以是string, char*, char; 第二个参数是起始位置. string:rfind()是从string的结尾处向前开始搜索.
3) <bitset>
bitset在进行位运算时与long相比有较大的优势:
一是二进制位可超过32;
二是对每一位进行操作时更加方便, 明显降低了编程复杂度;
三是节省空间, bitset的每一位都叧占用1 bit, bool数组的每项都占用8 bits.
作为一名使用C++语言的选手, 发挥自己所用语言的优势是必要的.
格式:  bitset<Len> Variable_Name(Value)
bitset<10> a;
bitset<10> b(120ul);
bitset<10> c(string("10101")); //a为空, b为从unsigned long构造, c为从字符串构造
bitset的各种运算符与整数的位运算符一样: "&"AND, "|"OR, "^"XOR, "~"为按位取反, "<<"为左移, ">>"为右移.其中, 除了"~"为单目运算符, 其他的运算符都为双目运算符, 并且可以在运算符后跟"="进行运算后赋值. bitset支持"[ ]"运算符, a[n]返回a的第n位上的值, 返回值为bool类型. 并且 [ ] 运算符有返回对该位的引用的重载函数, 所以也可以使用如 a[n] = 1 的语句改变该位上的值.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。