• 收录一些刷题相关的cpp的feature


    收录一些会用到的一些cpp的feature

    std::initializer_list

    Before

    vector<int> v;  // python: v = [1,2,3,4]
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    

    After:

    vector<int> v{1, 2, 3, 4};
    initializer_list<int> l = {1, 2, 3, 5};
    vector<int> v(l); // copy l into v
    

    auto

    Before

    set<int> st;
    typedef set<int>::iterator IT;
    typedef set<int>::const_iteratore CIT;
    
    for (IT it=st.begin(); it != s.end(); ++it)
    
    // const begin const end
    for (CIT cit=st.cbegin(); it != s.cend(); ++it)
    

    After

    for (auto it =st.begin(); it != s.end(); ++it)
    
    for (auto cit=st.cbegin(); it != s.cend(); ++it)
    
    auto it = st.find(x);
    

    Structured binding (Since C++17)

    Before

    pair<int, float> p(1, 3.14);
    int x = p.first;
    float y = p.second;
    
    python:
    p = (1, 3.14)
    x, y = p
    

    After

    const auto& [x, y] = p
    

    Before

    set<int> s;
    auto kv = s.insert(x); //返回的是一个pair, 第一个是迭代器, 第二个是插入成功与否
    auto it = kv.first;
    bool success = kv.second;
    

    After

    set<int> s;
    const auto [it, success] = s.insert(x);
    

    range based for loop

    Before

    set<int> s{1, 2, 3, 4, 5};
    for (auto it =s.begin(); it != s.end(); ++it)
    

    After

    for (int x : s)
    

    map遍历

    map<string, int> mp;
    for (auto&& kv: mp) {
        cout << kv.first <<" " << kv.second <<endl;
    }
    
    
    for (auto&& [k, v] : mp) {
        cout << k << " " << v <<endl;
    }
    

    lambda

    Before

    bool cmp(const pair<int, int>& a, 
        const pair<int, int>& b) {
        return a.second < b.second;
    }
    
    int main() {
        vector<pair<int,int>> v = ...;
        sort(begin(v), end(v), cmp);
    }
    

    After

    sort(begin(v), end(v), [](const auto& a, 
        const auto & b) {
        return a.second < b.second;
    });
    

    回调函数

    class Foo {
    public:
        void Init() {
            // 捕获指针
            bar->onUpdate([this](const auto& data) {
                this->onUpdate(data);
            })
        }
    private:
        Bar* bar;
        void onUpdate(const vector<int>& data) { ... }
    };
    
  • 相关阅读:
    Balanced Binary Tree
    Convert Sorted List to Binary Search Tree
    Convert Sorted Array to Binary Search Tree
    Binary Tree Zigzag Level Order Traversal
    Validate Binary Search Tree
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Maximum Depth of Binary Tree
    如何把U盘的两个盘或者多个盘合成一个
    bugku 想蹭网先解开密码
  • 原文地址:https://www.cnblogs.com/Draymonder/p/12424686.html
Copyright © 2020-2023  润新知