1. İç İçe Döngü
Örnek
initializer_list içindeki iki vector'ü dolaşmak için şöyle yaparız. İki tane iç içe for döngüsü kullanılır.
Örnek
Şu kod derlenmez. const iterator olduğu için std::initializer_list içindeki değerler değiştirilemez.
Şu kod derlenmez. const iterator olduğu için std::initializer_list içindeki değerler değiştirilemez.
Örnek
initializer_list içindeki iki vector'ü dolaşmak için şöyle yaparız. İki tane iç içe for döngüsü kullanılır.
std::vector<std::string> v1 = { "A", "B", "C" };
std::vector<std::string> v2 = { "X", "Y", "Z" };
for ( const auto &r : { std::cref( v1 ), std::cref( v2 ) } )
{
for ( const auto &s : r.get() )
std::cout << s << ' ';
}
2. Const Iterator
std::initializer_list normalde const bir iterator verir.
Şu kod derlenmez. const iterator olduğu için std::initializer_list içindeki değerler değiştirilemez.
int a = 5, b = 6;
for (auto & i : {a, b})
{
std::cout << i << std::endl; // Works as expected.
i = 3; // Error!
}
ÖrnekŞu kod derlenmez. const iterator olduğu için std::initializer_list içindeki değerler değiştirilemez.
#include <initializer_list>
struct Obj {
int i;
};
Obj a, b;
int main() {
for(Obj& obj : {a, b}) {
obj.i = 123;
}
}
Çözmek için şöyle yaparız.#include <initializer_list>
struct Obj {
int i;
};
Obj a, b;
int main() {
for(auto obj : {&a, &b}) {
obj->i = 123;
}
}
Çözmek için şöyle yaparız.#include <functional>
#include <initializer_list>
#include <iostream>
struct Obj {
int i;
};
Obj a, b;
int main()
{
for (Obj& obj : {std::ref(a), std::ref(b)}) {
obj.i = 123;
}
std::cout << a.i << '\n';
std::cout << b.i << '\n';
}
Hiç yorum yok:
Yorum Gönder