1. 使用C++出现问题:
    指定的平台工具集(v120)未安装或无效。请确保选择受支持的 PlatformToolset 值。
    解决办法:右键点击你的项目,选择属性--配置属性--常规,平台工作集,
    把V120改成V100.注意vs的版本vs2012是v110,vs2010是v100,vs2013则是v120。

  2. 名字空间右大括号没有分号

  3. 使用C++标准输入输出的变量、函数以及不带参数的操纵器时,必须包含头文件iostream
    cin >>--输入 cout << ---输出 cerr---标准出错

  4. 从键盘输入EOF
    从键盘输入EOF是Ctrl+D
    Ctrl+Z和Ctrl+C都是终端命令,但是作用不同,Ctrl+C是强制中断程序的执行。
    Ctrl+Z是将任务中断,但是此任务并没有结束,仍然在进程中只是维持挂起的状态。

  5. 一旦cout的操纵符被改变(除了setw),这种状态将保持不变,直到发生另一次改变。
    setw的影响仅持续到下一个输入或者输出操作。

  6. 操作符setfill用来定义特定的填充字符,当域宽大于输出项宽度的时候,用该字符填充多余的位。一旦设定,他的作用将一直持续到重新设置为止。
    操作符setprecision 用来定义浮点数的精度,默认值为6,一般情况下表示有效数字位数。在fixed后表示小数点后位数。

  7. noskipws 不忽略输入前的空白

  8. 如果在程序中同时使用c/C++的输入输出 在调用任何输入输出函数前,先调用下面函数
    ios::sync_with_stdio() //因为这两个库中的读写操作不会自动同步

  9. 注释(vs2010)
    1)注释:组合键“Ctrl+K+C”; ...
    2)取消注释:组合键“Ctrl+K+U” …
    3)可以直接选中要注释的行,直接按斜线

  10. C++打开关闭写入文件

int main()
{
    ifstream infile;
    ofstream outfile;
    int x = 0;
    int sum = 0;
    infile.open("123.txt");
    if (infile)
    {
        cout << "opened\n";
    }
    else 
        cout << "error";
    outfile.open("out.txt");
    while (infile >> x)
    {
        sum += x;
    }
    outfile <<sum<< '\n';
    cout << "finished\n";
    infile.close();
    outfile.close();
    return 0;
}

11.C++的强制类型转换

static_cast 用来将一个数据类型转换到另一种数据类型并使用任何合理的转换方式。
avg = static_cast<float>(x)/y;
要转换成的类型放在尖括号里。
const_cast  将指向常数的指针转变为指向非常数对象的指针。
reinterpret_cast  用来改变指针类型
dynamic_cast  用于继承层次中的类型转换。

12. C++增加数据类型bool true false 都为关键字

默认输出0,1 使用boolalpha用来输出true或者false

13. 用 + 进行字符串的连接,但是注意不能进行两边都是C风格字符串的连接。

  • erase 删除子串erase(4,7)开始和结束 从0开始 第一个参数越界 抛出out_of_range 的异常

  • insert 插入,第一个参数插入位置 第二个插入的字符串
    第一个参数越界 抛出out_of_range 的异常

  • replace 用一个指定字符串来代替一个子串
    三个参数 要替代字符串的首字符索引 子串字符数量 要替代子串的字符串。第一个参数越界 抛出out_of_range 的异常

  • swap 调换两个字符串

  • substr 返回一个子串,参数:首位字符索引,子串长度,第一个参数越界 抛出out_of_range 的异常

  • find 在一个字符串中查找一个子串 向后找

  • rfind 返回查找的子串 向前找

14. & 引用 通过&来标记 用来为存储器提供别名
如果用&指定一个函数参数为引用参数,将获得引用调用。
在引用调用中,引用参数将实际的实参传给函数,而不是实参的一个拷贝。
通过引用传递 ,不是值传递

void swap(int &, int &);
int main()
{
    int i = 7,j = -3;
    swap(i,j);
    cout << "i = " << i <<'\n'
            <<"j = " << j << '\n';
    return 0;
}
void swap(int & a, int & b)
{
    int t;
    t = a;
    a = b;
    b = t;
}

代码直接对i、j进行操作。
对文件进行操作时,不能使用传值调用,因为out与一个具体的文件关联。
输出到一个文件时,变量out是必须改变的。ofstream& out

15. 调用返回和引用返回

int& val()
    {
       return i;
    }

当return语句执行后,调用者可以直接访问i

没有&  j = val();
将i的值拷贝到临时存储空间  然后再拷贝到j

16. 有关可移植问题

关于void main 在C和C++中,不接收任何参数也不返回任何信息的函数原型为“void
foo(void)”。可能正是因为这个,所以很多人都误以为如果不需要程序返回值时可以把main函数定义成void
main(void)。然而这是错误的!main函数的返回值应该定义为int类型,C和C++标准中都是这样规定的。虽然在一些编译器中,void(mian)是可以通过的,但是并非所有编译器都支持。因为标准中从来没有定义过void
main。所以,如果想要程序有较好的移植性,请使用int main

关于int main(int argc,char argv[], charenvp[])?
这个也不是标准C的语法,char*envp[]是某些编译器提供的扩展功能,用于获取系统的环境变量。因为不是标准,所以并非所有的编译器都支持,移植性也较差。

17.无名联合要放在函数里,不能是全局的,是静态的。
18.注意getline的使用 在cin中使用注意要用char数组 不是string类型,cin默认是忽略空格的,使用getline可以正常对空格进行读取。

int f()
{
    string s;
    char ch[5];
    string buf;
    cin.getline(ch,5);
    cout <<ch;
    return 0;
}

19. 操作符+ 可以用来合并字符串,操作符左右两边都可以是string字符串,或者一个是string,一个是C风格的字符串,或者是一个string 一个char
但是注意:

int f()
{
    string s1,
             s2 = "w.c. ",
             s3 = "fields";
    s1 = "w.c. " + "filelds" ;
}

不能左右两边都是C风格的字符串,原因是:C风格的字符串是由其第一个字符的地址决定的,而对地址实现hi加法操作是违法的。
20. 关键字inline用于函数声明而不是函数定义。
21. 默认参数应该在函数声明而非定义中给出。

void print(int, int);//declare
void print(int a = 1, int b = 2)//def   这里是错误的
//应该改成
void print(int a= 1, int b = 2);
void print(int a, int b)

Tenacity
77 声望4 粉丝

有志者立长志,无志者常立志。


下一篇 »
C++类初学笔记