猎豹网校C++ Primer学习笔记

1、头文件(15th课)

大型项目开发,要有很多头文件。只能写声明,不能定义(类定义和常量定义可以)。

自己新建头文件(类定义,外部变量声明,函数声明)。源文件包含对应的头文件。

头文件里写类的声明,源文件里写类的定义,类的所有成员。

为避免预处理重复拷贝,头文件保护符。防止多重包含。

2、命名空间(16th)

注意:头文件里不能使用using声明,用的话直接写全。

 3、标准库string类型(17th)字符容器

 

 using std::string;

si种初始化方法:()小括号是调用string对象的构造函数。

先初始化后再赋值,别这么写。

 

 4、cin读入特点,遇空格暂停

cin>>name,也可以忽略掉前面的格式,如换行、空格、Tab。

遇空格暂停,但空格还在输入流里。下一次读取时,再次对前段格式处理,忽略空格。

改为使用getline(cin,name);

//在VS中使用cin>>会闪退,原因未知,用getline就正常。

#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string name;
    cout <<"input sth" << endl;
    //cin>>name;
    getline(cin,name);
    cout << name << endl;
    getchar();
    return 0;
}

 需要在cin>>后面加上cin.ignore():

cin>>name;
cin.ignore();

5、循环读入

循环读入,一次读入一行。

Win+z结束。输入重定向<。

一次读入一个单词,循环读入。

 6、string类型的操作。.size(),.empty()

7、字符串拼接操作,+号两边必须有一个是string类型的!

循环读入并拼接:

8、string下标操作

 

循环操作string

使用C中的函数:但要加上头文件#include<cctype>

实现忽略标点符号的输出。

9、vector动态数组、类模板

 #include<vector>;using namespace std;

可以使用下标索引。.push_back()尾部加数据。

vector<int> ivec;

初始为空,不可以通过下标操作添加数据。(1.初始就给长度;2.先cin>>temp,后再push)

vector<int> ivec(10);

其下标索引类型与string相似,size_type。

vector<int>::size_type index=1;

 循环读入数据进vector

计算首尾两个数之和:

 

练习代码,这种循环读入形式需以ctr+Z结束。

#include "stdafx.h"
#include<iostream>
#include<string>
#include<vector>

using namespace std;
int main()
{
    cout<<"Input sth.:"<<endl;
    string str;
    vector<string> ivec;
    while(cin>>str){
        ivec.push_back(str);
    }
    //cin.ignore();
    //ivec.push_back(str);
    cout<<ivec[0]<<endl;
    getchar();
    return 0;
}

 

 循环读入单词并输出:判断长度要用.size()

#include "stdafx.h"
#include<iostream>
#include<string>
#include<vector>

using namespace std;
int main()
{
    cout<<"Input sth.:"<<endl;
    string str;
    vector<string> ivec;
    while(cin>>str){
        ivec.push_back(str);
    }
//    for(vector<string>::size_type ix=0;ix!=sizeof(ivec);ix++)
    for(vector<string>::size_type ix=0;ix!=ivec.size();ix++)
    {
        cout<<ivec[ix]<<endl;
    }
    cout<<"sizeof:"<<sizeof(ivec)<<endl;
    cout<<".size():"<<ivec.size()<<endl;
    //cin.ignore();
    //ivec.push_back(str);
    getchar();
    return 0;
}
;
View Code

 10、iterator迭代器,不用下标遍历

很多容器没法用下标,但所有容器都有迭代器。

迭代器实际上是一个指针,通过解引用(*)修改数据和读取数据。

常迭代器:

 11、四个二进制一组即16进制

四个一组后,权值向前递次乘16。

十六进制数,可小写可大写。后面接H或前面加0x。

一个字节=8位二进制。

12、bitset<num>处理二进制

头文件!

下标计数为倒序,从0开始。

初始化,可以使用字符串。

也可以使用键盘输入来初始化:

.any();判断是否有1

.none();判断是否全是0

.count();计数1

.size()-.count();计数0

set(index)变成1,reset()把某位变成0,flip()翻转。

二进制变成十进制:

 13、bitset应用-埃拉托斯特尼_筛法-寻找质数

先全初始化为1,然后从头开始向后筛选,遇倍数则置0。.count()可以统计质数个数,貌似应该-1。

然后循环输出即可:

 

改进1,只筛到根号即可。改进2,从平方处开始筛。

#include<cmath>

500万都没问题。

 

posted @ 2019-08-22 19:23  ostartech  阅读(423)  评论(0编辑  收藏  举报