C++11 基于范围的和映射 : readability

标签 c++ c++11 dictionary foreach code-readability

<分区>

新的基于范围的 for 循环确实提高了可读性并且非常易于使用。但是,请考虑以下几点:

map<Foo,Bar> FooAndAssociatedBars;

for (auto& FooAndAssociatedBar : FooAndAssociatedBars) {
    FooAndAssociatedBar.first.doSth();
    FooAndAssociatedBar.second.doSomeOtherThing();
}

这可能是一个细节,但我发现如果我可以做类似的事情,它会更具可读性:

for ( (auto& foo, auto& bar) : FooAndAssociatedBars) {
    foo.doSth();
    bar.doSomeOtherThing();
}

你知道等效的语法吗?

编辑: 好消息:C++17 有一个解决这个问题的提案,称为结构化绑定(bind)(参见 1)。在 C++17 中,您应该能够编写:

tuple<T1,T2,T3> f(/*...*/) {
    /*...*/ 
    return {a,b,c};
}
auto [x,y,z] = f(); // x has type T1, y has type T2, z has type T3

解决了这个可读性问题

最佳答案

没有你想要的东西。最接近的是在循环内声明变量:

for (auto& FooAndAssociatedBar : FooAndAssociatedBars) {
    auto& foo = FooAndAssociatedBar.first;
    auto& bar = FooAndAssociatedBar.second;

    // ...
}

关于C++11 基于范围的和映射 : readability,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15526204/

相关文章:

c++ - 使用 C++ 泛型编程对 x 和 y 类型的所有排列执行 func(x,y) 的运行时调用

c++ - 为什么显示vector<long double>时看不到所有有效数字?

android - Maps V2 myLocation 蓝点回调

python - 从嵌套 for 循环到字典理解?

共享库中类的构造函数和析构函数的 C++ undefined reference 错误

c++ - 通过转换它们来组成可变参数模板参数

c++ - 为什么 NDK 编译器无法识别 LOCAL_CFLAGS 定义?

C# 循环字典并对键的值求和

c++ - 排序可能已经排序的序列——STL::sort efficiency

c++ - 单应错误