1、有时候用360整理的收藏夹一会在上边一会在侧边栏中,一直喜欢在上面的,可以一下子就点到,有时不懂怎么改,现在知道啦,直接:ctrl+B即可~~~~
2、弹出一个网页显示几秒就一闪又没了,阻止的方法:ESC
3、题目提交时出现Runtime error如果是由递归破栈导致,可以在头文件后面加:#pragma comment(linker, “/STACK:102400000,102400000″)
4、一个函数的声明,如果是以关键字"inline"开头的就表示此函数是一个内联函数,例如:
inline int MAX(int a,int b)
{ return a>b?a:b;
}
它与预处理宏有相同之处,就是在每一处调用内联函数的地方,编译器将展开内联函数,把它的代码直接调用到调用处,从而节省了函数调用、参数入栈和返回值的处理,优化了程序的执行。
一些频繁调用的函数,一般都定义为内联函数,而不会导致代码极度膨胀,在内联函数的代码中,不允许带有while,for循环结构以及递归处理语句,这些语句比在函数本身的调用更耗费时间和资源。所以只能用普通函数去处理。以后写代码的时候得注意了,前面的代码中没有注意这个要求,很多地方都写了~~~不好意思~~~~~
5、关键字"typename"可以用在模板中强调某个标志符是一个类型,例如:下面的代码说明了typename X<T>::X_type和typename X<T>::都是一个类型,而不是X的一个成员变量。
template<class T>
class X{
public:
typedef T X_type;//重新定义T;
typedef T* X_pointer;//重新定义T*;
};
template<class T>
class Y{
public:
typedef typename X<T>::X_type Y_type;
typedef typename X<T>::X_pointer Y_pointer;
}
6、模板完全特化:当模板的泛化处理不合适某些特定的数据类型是,可以针对这个数据类型给出相应的模板,分为函数模板特化和类模板特化。
函数模板特化是在函数模板定义出来后,在用关键字"template<>"开头给出特定类型下的函数模板定义。例:
#include<iostream>
using namespace std;
template<class T>
void func(T a){
cout<<"Hello"<<endl;
}
template<> void func(int a){
cout<<"Hello there"<<endl;
}
int main(){
func(2);
func('y');
return 0;
}
对类特化如:template<>class A<int>:说明是对类模板A的一个完全特化。
7、对于编译出现的警告信息处理方法(vc++ 6.0调试下),例:
cator<cahr>>const*,std::basic_string<char,std::char_traits<char>,std::allocator<char
':identifier was truncated to '255' characters int the debug information
cator<char>>*,std::basic_string<char,std::char_triats<char>,std::allocator<char>>,st
rruncate to '255' charactor in the debug information
如出现标识符超长出现的警告,这些警告可以不用处理,但是处理的方法是:
#pragma warning(disable:4786) //强制忽略标识符超长警告
#include<iostream>
#include<vector>
#include<string>
int main()
{ using namespace std;
vector<string> v;
v.push_back("dog");
v.push_back("bird");
v.push_back("Hello there");
for(vector<string>::const_iterator it=v.begin();it!=v.end();it++)
cout<<*it<<endl;
return 0;
}
又例如在vc++中使用STL port会产生异常处理机制方面的警告"warning C4530",此时可用:
#pragma warning(disable:4530)
8、容器中常用的语法实现和说明
X::value_type //提供值的类型
X::iterator //提供迭代器(必须是前向迭代器)
X::const_iterator //提供常迭代器
X::size_type //提供大小类型
9、cin~~:
cin.clear(); //清楚错误状态
cin.ignore();//跳过无效的数据
10、发现比方以字符串长度作为while循环,最好先定义一个整形变量如len=strlen(s)/s.length(),再用while(j<len),否则直接写:while(j<s.length())的话会超时更有时答案会错误~~
11、(转)在第一次编译MFC文件时就出项了这个问题:
fatal error C1083: Cannot open precompiled header file: 'Debug/*.pch': No such file or dire
查了下这个错误是由预编译文件的设置造成的~~有几种可以尝试的途径:
1)单独编译StdAfx.cpp
2)编译所有(即按Ctrl+F7)
3)在工程-设置-c++-最下面的工程选项里去掉××.pch文件
4)在工程-设置-c++-在分类里选择预编译头文件,选择自动使用预补偿页眉,或者选择不使用预补偿头。
现在说下.pch文件: 预编译头文件(一般扩展名为.PCH),是把一个工程中较稳定的代码预先编译好放在一个文件(.PCH)里。这些预先编译好的代码可以是任何的C/C++代码--甚至可以是inline函数,只它们在整个工程中是较为稳定的,即在工程开发过程中不会经常被修改的代码.。
为什么需要预编译头文件?一言以蔽之:提高编译速度。一般地,编译器以文件为单位编译,如果修改了一工程中的一个文件则所有文件都要重新编译,包括头文件里的所有东西(eg.Macro宏、Preprocessor预处理),而VC程序中,这些头文件中所包括的东西往往是非常大的,编译之将占很长的时间。 但它们又不常被修改,是较稳定的,为单独的一个小文件而重新编译整个工程的所有文件导致编译效率下降,因此引入了.PCH文件。
如何使用预编译头文件以提高编译速度?要使用预编译头文件,必须指定一个头文件(.H),它包含我们不会经常修改的代码和其他的头文件,然后用这个头文件 (.H)来生成一个预编译头文件(.PCH)VC默认的头文件就是StdAfx.h,因为头文件是不能编译的,所以我们还需要一个.CPP文件来作桥梁,VC默认的文件为StdAfx.cpp,这个文件里只有一句代码就是:#include "StdAfx.h"。接下来要用它生成.PCH文件,涉及到几个重要的预编译指令:/Yu、/Yc、/Yx、/Fp。简单地说:
/Yc:是用来生成. PCH文件的编译开关。在 Project -> setting -> C/C++的Category里的Precompiled Header,然后在左边的树形视图中选择用来编译生成.PCH文件的.CPP文件(默认即StdAfx.cpp)你就可以看到/Yc这个开关,它表示这个文件编译了以后是否生成.PCH文件(可能/Yc的c表示create)。
/Fp:指令指定生成的.PCH文件的名字及路径(可能/Fp的p代表 path)。
/Yu的u即use使用,工程中只要包括了.H文件的文件都会有这个/Yu指令。如果选择自动Automatic...的话则原来为/Yc的地方就换成了/Yx指令。如果选择自动,则每次编译时编译器会看以前有没有生成过.PCH文件,有则不现生成否则就再次编译产生.PCH文件。
12:win32是指你现在所使用的操作系统是32位的windows环境。更多知识:http://baike.baidu.com/view/270236.htm
13:c++中system函数使用方法:system是一些可以调用的DOS命令。
14:如何进入dos:点击:开始- 运行,在“运行对话框”里面,输入:cmd ,按下回车就可以进入了.当然还可以打开命令提示符,
15,cin.getline(Str,MAX,'\n');意思是:输入一串字符,直到遇到换行符时停止,字符个数不超过MAX-1个。