03_C++的一些语法特性
Carpe Tu Black Whistle

C++中的string类

以前用 char[] 的方式处理字符串很繁琐。
string 类,定义、拼接、输出、处理都很简单
string 只能用 cin 和 cout 处理,无法用 scanf 和 printf 处理:

1
2
3
4
5
6
string s = "hello world";   // 赋值字符串
string s2 = s;
string s3 = s + s2; // 字符串拼接直接用 +
string s4;
cin >> s4; // 读入
cout << 输出
  • cin读入字符串的时候,是以空格为分隔符的
    • 如果想读入一整行的字符串,就需要使用 getline
  • s 的长度可以用 s.length()获取
    • 字符数量,不包含\0
1
2
3
string s;   // 定义一个空字符串s
getline(cin, s); // 读取一行的字符串,包括空格
cout << s.length(); // 输出字符串s的长度

string 中还有个很常用的函数叫做 substr,作用时街区某个字符串中的淄川,用法有两种形式:

1
2
string s2 = s.substr(4);    // 表示从下标4开始一直到结束
string s3 = s.substr(5,3); // 下标5开始3个字符

C 与 Cpp 结构体的区别

1
2
3
4
5
6
struct stu{
int grade;
float score;
};
struct stu arr1[10]; // Cy远里面需要写成 struct stu
stu arr2[10]; // C++ 里面不用写 struct,直接写 stu 就行

STL

vector

头文件 #include < vector >
命名空间 using namespace std;

  • vector默认置零
  • 可以在设定后动态地resize
    1
    2
    3
    4
    5
    6
    7
    8
    #include <iostream>
    #include <vector>
    using namespace std;
    int main(){
    vector<int> v1; // 定义⼀个vector v1,定义的时候没有分配⼤小
    cout << v1.size(); // 输出vector v1的⼤大⼩小,此处应该为0
    return 0;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    vector<int> v(10); // 直接定义⻓度为10的int数组,默认这10个元素值都为0

    // 或者
    vector<int> v1;
    v1.resize(8); //先定义一个vector变量v1,然后将⻓度resize为8,默认这8个元素都是0

    // 在定义的时候就可以对vector变量进行初始化
    vector<int> v3(100, 9);// 把100⻓度的数组中所有的值都初始化为9

    // 直接⽤用[]下标访问即可(也可以⽤用迭代器器访问,下⾯会讲)
    v[1] = 2;
    cout << v[0];

几个vector的常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> a; // 定义的时候不指定vector的⼤小
cout << a.size() << endl; // 这个时候size是0
for(int i = 0; i < 10; i++){
a.push_back(i); // 在vector a的末尾添加⼀个元素i
}
cout << a.size() << endl; // 此时会发现a的size变成了10
vector<int> b(15); // 定义的时候指定vector的大小,默认b里面元素都是0
cout << b.size() <<endl;
for(int i=0;i<b.size;i++){
b[i]=15;
}
for(int i=0; i<b.size(); i++){
cout << b[i] <<" ";
}
cout<<endl;
vector<int> c(20, 2); // 定义的时候制定vector的大小并把所有的元素赋到一个指定值
for(int i=0;i<c.size();i++){
cout << c[i] << " "l
}
cout << endl;
for(auto it=c.begin(); it!=c.end();it++){ // 使用迭代器的方式访问vector
cout << *it <<" ";
}
return 0;

容器 vector\set\map 都可以用迭代器访问遍历。
c.begin() 是一个指针,只想容器的第一个元素, c.end() 指向容器的最后一个元素的后一个位置