Benim sorum: Herhangi bir aralıkta standart kütüphane kapları (mevcut) oluşturabilecek miyiz? Ve daha da önemlisi, menzil görünümleriyle?
Hayır. Doğru ölçütleri karşılayan rasgele bir aralıktan oluşturulabilen tek standart kitaplık bileşeni std::span<T>
.
Standart kitaplığın büyük olasılıkla gideceği yön, aralık-v3'ün de gideceği yöndür (aralık-v3'ün bağlantılı örneğinin derlendiğini, ancak kullanımdan kaldırılmış bir dönüşümle ilgili uyarıldığını unutmayın) - sizin için dönüşüm yapmak için bir yardımcı kullanarak :
std::vector<int> squares =
std::ranges::views::transform(vec, sq) | std::ranges::to<std::vector>;
Menzil kurucuları yönünde gitmemenizin nedenlerinden biri, kullandığınız örnekten görülebilir:
std::vector<int> squares { std::ranges::views::transform(vec, sq) };
Bu bildirimin bu ikisinden ne kadar farklı olduğunu düşünün:
std::vector v { std::ranges::views::transform(vec, sq) };
std::vector w ( std::ranges::views::transform(vec, sq) );
v
mutlaka vector<transform_view<...>>
tek bir içeren transform_view
, w
birvector<int>
.
Dahası, standart kütüphaneye daha fazla, dikkatle kısıtlanmış konteyner kurucuları eklemek üçüncü taraf konteyner türlerine yine de yardımcı olmaz - buna benzer bir tesis ranges::to
her durumda mükemmel çalışır.