实际编程的几个注意事项

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) 

 

12、二维vector初始化

r为行数, c为列数

vector<vector<int> > newOne(r, vector<int>(c, 0));

13、清空cin缓冲区不然会影响后面的getline(cin, str)

cin.clear();
cin.sync();

string str;
getline(cin, str);

14、几个数学函数

log()
 自然对数
 
log10()
 以10为底的自然对数
 
 
pow()
 求幂
 

sqrt()
 求平方根

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值