跳转至

C++语法


输入输出

cin cout<iostream>

cin 以空格为分隔接受输入。

1
2
3
4
5
6
7
    int a;
    cin >> a;
    cout << a << 'aaa' << endl;

    string str;
    cin >> str;
    cout << str << endl;

<iomanip> 给出了 cout 的更多输出用法。

int main(){
    int i = 78;
    cout << i << endl; 
    cout << dec << i << endl;//十进制
    cout << oct << i << endl;//八进制
    cout << hex << i << endl;//十六进制
    cout << setiosflags(ios::uppercase);//字母大写
    cout << hex << i << endl;//十六进制
    cout << setbase(8) << i << endl;//八进制
}

setprecision(3) 为精度设置。

fixed 控制小数点后的精度。

int main(){
    double i = 3333.1415926;
    cout << i << endl; //3333.14 默认六位有效数字
    cout << setprecision(3) << i << endl;//3.33e+003
    cout << setprecision(9) << i << endl;//3333.14159
    cout << setiosflags(ios::fixed);
    cout << i << endl;//3333.141592600
    cout << fixed << setprecision(3) << i << endl;//3333.142
    cout << setprecision(9) << fixed <<  i << endl;//3333.141592600
}

setiosflags(ios::showpoint) 强制六位有效数字。

setiosflags(ios::showpos) 强制显示正负号。

setiosflags(ios::left) 左对齐。

setw(int n) 宽度设置。

setfill(char c) 填充字符设置,默认空格。

resetiosflags(……) 取消设置。


string 字符串

string 库中。

构造

string str:生成空字符串

string s(str):s = str

string s(str, begin,len):s = str[begin:begin+len]

string s(str, len):等同上条 begin = 0 的情况,str 为 字符指针。

string s(num ,c):生成num个c字符的字符串

string s(str, stridx):s = str[stridx:]

输入输出

1
2
3
4
    cin >> str; //空格截止
    getline(cin, str); //'\n'截止

    cout << str;

字符串连接

1
2
3
4
5
    a = 'hello';
    b = 'world';
    c = a + ' ' + b;

    cout << c << endl;//hello world

其他成员函数

s.length() 返回字符串长度。

s.substr(pos, len) 返回 s[pos:pos+len]。

s.insert(pos, str) 在 pos 处插入 str。

s.erase(pos, len) 在 pos 处删除 len 大小的字符串。无 len 则删除到末尾

s.erase(std::find(s.begin(), s.end(), char)) 删除 s 中的第一个 char 。

s.append(str) 在 s 末尾接上 str。

int main()
{
    std::string str = "std::string";
    const char* cptr = "C-string";
    const char carr[] = "range";

    std::string result;

    // 接入 n 个 字符
    result.append(3, '*');
    assert(result == "***");

    // 接入 str 的前 n 个字符
    result.append(cptr, 5);
    assert(result == "***C-str");

    // 接入整个字符串
    result.append(1, ' ').append(cptr);
    assert(result == "***C-str C-string");

    // 接入 str[pos:pos+len]
    result.append(str, 3, 2);
    assert(result == "***C-str C-string::");

    // 接入 前pos 到 后pos 不包括后部分
    result.append(&carr[2], &carr[3]);
    assert(result == "***C-str C-string::n");

    // 接入初始化列表
    result.append({'p', 'o', 's'});
    assert(result == "***C-str C-string std::string::npos");
}

s.replace(pos, len, str); 将 s[pos:pos+len] 替换为 str。

s.find(str, pos) 从 pos 位置开始查找 str ,返回第一次出现的位置。pos 默认 0。


vector 变长数组

构造函数

vector<Type> varName; 构造一个空的 vector。

int main()
{
    // C++11 initializer list syntax:
    std::vector<std::string> words1{"the", "frogurt", "is", "also", "cursed"};
    std::cout << "1: " << words1;

    // words2 == words1
    std::vector<std::string> words2(words1.begin(), words1.end());
    std::cout << "2: " << words2;

    // words3 == words1
    std::vector<std::string> words3(words1);
    std::cout << "3: " << words3;

    // words4 is {"Mo", "Mo", "Mo", "Mo", "Mo"}
    std::vector<std::string> words4(5, "Mo");
    std::cout << "4: " << words4;
}

获取长度

size() 返回 vector 中的元素个数。

元素操作

push_back(x) 在末尾插入元素。

pop_back() 返回并删除末尾的元素。

a1.swap(a2) 交换两个 vector。

erase(pos1,pos2) 删除 [pos1,pos2) 范围的元素,返回指向 pos2 的 iterator。

v[i] 访问元素。

遍历

iterator 使用遍历器。

for (int i = 0; i < v.size(); i++) v[i]; 同数组。

for (auto &a : v) 依次取出 vector 中的元素。使用 &a 会使循环体的操作影响到 vector。使用 a 每次创建一个临时变量,不影响 vector。


set 集合

唯一有序的元素集合

构造函数

set<Type> s;

元素操作

insert(x) 末尾插入。

erase(x) 删除,返回删除个数。

find(x) 查找,返回指向查找元素的 iterator,查找不到则返回 s.end()

count(x) 计数,返回找到的个数。


map 字典

构造函数

map<Type1, Type2> m; 构造 m[Type1 x1] = Type2 x2;

元素操作

erase(x) 删除,返回删除个数。

count(x) 计数,返回查找到的个数。

find(x) 查找,返回 iterator,查找不到返回 m.end()