C2Cpp总结

没系统的学,有些东西是自己的理解,不一定对.

01.命名空间

using namespace std;

std命名空间是C++中标准库类型对象的命名空间。

02.C头文件

#incude<stdio.h> // C
#include<cstdio> // Cpp

去掉 .h 加上 c

03.变量声明

bool a = true; // 非0为true,0为false
string b = "Hello World!"; // 不是一个标准数据类型。

多了 boolstring 两个类型可以声明.

使用 string 时需要引入 string 头文件

04.结构体

struct stu {
    string name;
    int age;
};

stu stuList[10];

如你所见,不用 typedef 了,可以直接省去 struct.

05.引用

void swap(int &a,int &b){
    int temp = 0;
    temp = a;
    a = b;
    b = temp;
}

swap(a,b);

上面这个swap函数也能实现a和b交换.在C中,这个函数需要传入a和b的地址,用指针来实现.

指针和引用的区别(个人理解,可以参考{C++ 中指针和引用的区别 | 菜鸟教程}):

&a 传入时传入 a
*a 传入时传入 &a
引用可以认为是const指针,他的地址没法被修改.

06.vector - 向量

使用前需要引入 vector 头文件

定义和初始化

vector <int> a(10,1); // 十个元素的数组,所有元素初始化为1
vector <int> b(10); // 十个元素的数组,默认初始化为0
vector <int> c; // 零个元素的数组

方法

// 假设a是int型向量
a.resize(int); // 重新设定大小
a.size(void); // 获取容器大小
a.push_back(int); // 在末尾添加元素(自动扩容)

07.set - 集合

使用前需要引入 set 头文件

定义

// 有互异性 不能初始化 会自动从小到大排序
set <int> a;
a.insert(3);
a.insert(2);
a.insert(1);

遍历

// 迭代器 (end()返回这个集合最后一项的下一项的指针)
for(auto p = a.begin(); p != a.end() ; p++){
    cout << *p << endl;
}

方法

// 假设a是int型集合
a.insert(int); // 插入
a.find(int); // 在a中寻找,返回指针
a.erase(int); // 在a中删除
a.size(void); // 获取容器大小

08.map - 键值对

使用前需要引入 set 头文件

定义和初始化

// 会自动从小到大排序
/*
    struct {
        string first;
        int second;
    }
*/
map <string,int> a;
a["王麻子"] = 18;
a["李四"] = 18;
a["张三"] = 18;

遍历

for(auto p = a.begin(); p != a.end(); p++){
    cout << p -> first << "的年龄是" << p -> second << "岁" << endl;
}

方法

a.size(void); // 获取容器大小

09.stack - 栈

使用前需要引入 stack 头文件

  • 先进后出
  • 只能查看栈顶

定义

stack <int> a;

方法

push(int); // 压栈
pop(void); // 出栈
top(void); // 栈顶
a.size(void); // 获取容器大小

10.queue - 队列

使用前需要引入 queue 头文件

  • 先进先出
  • 只能查看队列首尾

定义

queue <int> a;

方法

push(int); // 尾部添加
front(void); // 查看顶部
back(void); // 查看尾部
pop(void); // 删除队首的元素
a.size(void); // 获取容器大小

11.unordered - 无序

使用前需要引入 unordered_map or unordered_set 头文件

这俩和 map set 用法一样,只不过不排序

12.bitset - 位操作

使用前需要引入 bitset 头文件

定义和初始化

bitset <4> a; // 0000
bitset <4> b(7); // 0111
bitset <4> c("101"); // 0101
bitset <5> d("101"); // 00101
string i = "01011101";
bitset <4> e(i,2,3); // 从i的第二位读三个进来

方法

to_ulong(void); // 转化为十进制(unsigned long)
any(void); // 是否有1
none(void); // 是否没1
count(void); // 有几个1
test(int); // 某号位置是否为1
flip(void); //取反
flip(int); // 某号位置取反
empty(void); // 归零
empty(int); // 某号位置归零
a.size(void); // 获取容器大小

13.sort - 排序

使用前需要引入 sort 头文件

使用方法

/*排序,从小到大*/
sort(arr.begin(),arr.end()); // [begin,end)

自定义排序规则

 /*
     自定义排序规则
     返回1则排序
     返回0则不排序
 */

bool cmp(stu a,stu b){
    /*
        自定义的排序规则
        先按年龄从大到小排序
        年龄相同则按姓名排序
        年龄姓名均相同不排序
     */
    if(a.age != b.age){
        return a.age < b.age;
    }else if(a.name != b.name){
        return a.name < b.name;
    }else{
        return 0;
    }
}

stu stuList[3] = {
    {"张小龙",18},
    {"李小帅",19},
    {"张大龙",18},
};

sort(stuList,stuList+3,cmp);

14.cctype头文件

使用前需要引入 cctype 头文件

isalpha(char); // 是否为字母
isupper(char); // 是否为大写字母
islower(char); // 是否为小写字母
isalnum(char); // 是否为字母或数字
isspace(char); // 是否为空格或\n\t\r
toupper(char); // 转换成大写字母
tolower(char); // 转换成小写字母

15.c++11的新特性

01.auto声明

// 直接判断数据类型
auto a = 1; // 整数
auto b = .1; // 浮点数

auto c = .0; // 必须初始化
cin >> c;
cout << c << endl;

// 用于迭代器
vector <int> d(10,1);
for(auto p = d.begin(); p != d.end(); p++){
    cout << *p << endl;
}

02.基于范围的for循环

#include<iostream>
#include<vector>

using namespace std;

int main(void)
{
    vector <int> a(5,1);
    cout << "------------------" << endl;
    for(auto value:a){
        value++; // value只是a[xxx]的一个副本,修改它不会对a产生任何影响
        cout << value << endl;
    }
    cout << "------------------" << endl;
    for(auto value:a){
        cout << value << endl;
    }
    cout << "------------------" << endl;
    for(auto &value:a){
        value++; // 取地址,修改它会对a产生任何影响
        cout << value << endl;
    }
    cout << "------------------" << endl;
    for(auto value:a){
        cout << value << endl;
    }
    cout << "------------------" << endl;

    return 0;
}

03.to_string

把一个其他类型的数据转换成字符串.

float a = .1;
string s = to_string(a);

04.stoi_stod

把字符串转换成其他数据类型.

  • stoi: string to int
  • stod: string to double
  • 其他的还有: stof/stold/stol/stoll/stoul/stoull
int a = stoi("123");
cout << a-- << endl; // 123
cout << a << endl; // 122
double b = stod(".123");
cout << b++ << endl; // 0.123
cout << b << endl; // 1.123
最后修改:2023 年 04 月 28 日
如果觉得我的文章对你有用,请随意赞赏