C++11 機能

ラムダ式、auto, range-based for など.

ラムダ式

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> v = {1, 2, 3, 4, 5};
    
    std::cout << "偶数: ";
    std::for_each(v.begin(), v.end(), [](int x) {
        if (x % 2 == 0) std::cout << x << " ";
    });
    std::cout << std::endl;
    
    return 0;
}

偶数: 2 4

auto型推定

#include <iostream>
#include <vector>
#include <map>

int main() {
    auto v = std::vector<int>{1, 2, 3};
    auto m = std::map<std::string, int>{};
    
    for (auto x : v) {
        std::cout << x << " ";
    }
    std::cout << std::endl;
    
    return 0;
}

1 2 3

Range-based for

#include <iostream>
#include <vector>

int main() {
    std::vector<int> v = {10, 20, 30};
    
    // 値のコピー
    for (int x : v) {
        std::cout << x << " ";
    }
    std::cout << std::endl;
    
    // 参照でアクセス
    for (auto& x : v) {
        x *= 2;
    }
    
    for (int x : v) {
        std::cout << x << " ";
    }
    std::cout << std::endl;
    
    return 0;
}

10 20 30
20 40 60

nullptr

#include <iostream>

void func(int* ptr) {
    if (ptr != nullptr) {
        std::cout << "ポインタは有効" << std::endl;
    } else {
        std::cout << "ポインタは null" << std::endl;
    }
}

int main() {
    func(nullptr);  // NULL ではなく nullptr を使用
    return 0;
}

ポインタは null

ポイント

  • ラムダ式で無名関数
  • auto で型推定
  • range-based for で簡潔ループ
  • nullptr で null代入