1、输入包含空格的字符串
//C
char s1[4000];
gets(s1);
//C++
string s2;
getline(cin, s2);
2、无法定义 char s ='' 。"" != "空格"
3、isalpha(), tolower() 等函数的头文件是 ctype.h
4、substr(i, n) 参数i是开始的第一个字符的位置(不是迭代器), n是从i开始的总共n个字符
5、vector erase(p)删除容器p所指向的元素,返回的迭代器指向刚才所删除元素后面的一个元素。在for循环中调用erase之后,--it.
6、无法用STL里的sort算法对容器set作排序。set本身就是一种有序的容器。 set主要用于不常变动的数据,对其数据的变动,只能是删除旧的,然后再插入新的。随机访问的容器vector,deque,string没有sort成员,可调用泛型算法sort排序;list排序调用自带的list::sort。
bool compare(int a,int b)
{
return a<b; //升序排列,如果改为return a>b,则为降序
}
sort(a,a+20,compare);
7、map 可以修改实值,而不能修改key。每个关键字只能在map中出现一次。
#include <map>
map<int, int> mmap;
mmap.insert(pair<int, int>(index, value));
for(map<int, int>::iterator it=mmap.begin(); it!=mmap.end(); it++) {
cout << it->first << ' ' << it->second <<endl;
}
8、cin是标准输入istream的一个对象,">>"接收一个istream对象作为其做操作数,接收一个对象作为其右操作数。">>"操作符返回其左操作数作为结果。cin>>x>>y,因为cin>>x返回cin对象,接着又可以进行cin>>y。所以我们就可以顺利进行输入了。
9、获取变量的数据类型
#include <typeinfo>
using namespace std;
...
cout << typeid(d).name() << endl;
10、首先atoi和strtol都是c里面的函数,他们都可以将字符串转为int,它们的参数都是const char*,因此在用string时,必须调c_str()方法将其转为char*的字符串。或者atof,strtod将字符串转为double。strtol的第三个参数base的含义是当前字符串中的数字是什么进制,而atoi则只能识别十进制的。另外可以注意到的是,如果转换失败,这两个函数不会报错,而是返回0。但是对于stoi就不是这样了,atoi是string库中的函数,他的参数是string。
string strnum="XDEADbeE";
int num1=atoi(strnum.c_str()); //出错只能识别十进制
int num2=stoi(strnum.c_str(),0,16);
cout<<"atoi的结果为:"<<num1<<endl;
cout<<"stoi的结果为:"<<num2<<endl;
int型转string型
void int2str(const int &int_temp,string &string_temp)
{
stringstream stream;
stream<<int_temp;
string_temp=stream.str(); //此处也可以用 stream>>string_temp
}
string型转int型
void str2int(int &int_temp,const string &string_temp)
{
stringstream stream(string_temp);
stream>>int_temp;
}
11、能进行算术运算的迭代器只有随即访问迭代器,要求容器元素存储在连续内存空间里,vector,string,deque的迭代器是有加减法的,但是map,set,multimap,multiset的迭代器是没有加减法的,list也不可以。
倒序遍历:for(map <string, int>::reverse_iterator it=recd.rbegin(); it!=recd.rend(); ++it)