Ad alanları
Türevler
Eylemler

Taşıyıcılar (Containers) kitaplığı

cppreference.com sitesinden
< cpp

NOT: Bu başlığın çevirisi devam etmektedir. Siz de bir kısmını çevirerek katkıda bulunabilirsiniz.

C++ Taşıyıcılar (Containers) Kitaplığı programcılara kuyruklar, listeler ve yığınlar gibi standart veri yapılarını kolayca geliştirme olanağı sağlayan, genel amaçlı bir sınıf şablonları ve algoritmaları bütünüdür. Her biri farklı işlemler için tasarlanan üç tür taşıyıcı vardır: dizi taşıyıcıları, ilişkili taşıyıcılar ve sırasız ilişkili taşıyıcılar.

Taşıyıcı, öğeleri için ayrılan depolama alanını yönetir ve doğrudan veya iterator denen işaretçi (pointer) benzeri yapılar yoluyla bunlara erişmek için bazı üye fonksiyonlar (member functions) sağlar.

Çoğu taşıyıcı birbirlerininkine benzer en az birkaç üye fonksiyona ve benzer bazı işlevselliğe sahiptir. Belirli bir uygulama için hangi taşıyıcının iyi olduğu sadece sunulan işleve değil, aynı zamanda farklı iş yükleri için verimliliğine de bağlıdır.

Konu başlıkları

[düzenle] Dizi (Sequence) taşıyıcıları

Dizi taşıyıcıları öğelerine ardışık şekilde erişilebilen veri yapılarıdır.

(C++11'den beri)
statik (sabit boyuylu) bitişik dizi
(sınıf şablonu) [edit]
dinamik (değişken boyutlu) bitişik dizi
(sınıf şablonu) [edit]
çift uçlu kuyruk
(sınıf şablonu) [edit]
(C++11'den beri)
tek bağlantılı liste
(sınıf şablonu) [edit]
çift bağlantılı liste
(sınıf şablonu) [edit]

[düzenle] İlişkili (Associative) taşıyıcılar

İlişkili taşıyıcılar hızlıca aranabilen (O(log n) karmaşıklıkta) otomatik olarak sıralanmış veri yapılarıdır. Genellikle kırmızı-siyah ağaç (red-black tree) şeklindedirler.

benzersiz anahtarlar koleksiyonu, anahtarlarına göre sıralanır
(sınıf şablonu) [edit]
anahtar/değer çiftleri koleksiyonu, anahtarlarına göre sıralanır, anahtarları benzersizdir
(sınıf şablonu) [edit]
benzersiz olmayan anahtarlar koleksiyonu, anahtarlarına göre sıralanır
(sınıf şablonu) [edit]
anahtar/değer çiftleri koleksiyonu, anahtarlarına göre sıralanır, anahtarları benzersiz değildir
(sınıf şablonu) [edit]

[düzenle] Sırasız ilişkili (Unordered Associative) taşıyıcılar

Sırasız ilişkili taşıyıcılar hızlıca aranabilen (O(1) genel, O(n) en kötü durum zaman karmaşıklığı) ve bunun için içindeki öğelerin hash değerini alan veri yapılarıdır.

(C++11'den beri)
benzersiz anahtarlar koleksiyonu, anahtarları hash değeri alınarak saklanır
(sınıf şablonu) [edit]
(C++11'den beri)
anahtar/değer çiftleri koleksiyonu, anahtarları hash değeri alınarak saklanır, anahtarları benzersizdir
(sınıf şablonu) [edit]
(C++11'den beri)
benzersiz olmayan anahtarlar koleksiyonu, anahtarları hash değeri alınarak saklanır
(sınıf şablonu) [edit]
(C++11'den beri)
benzersiz olmayan anahtarlar koleksiyonu, anahtarları hash değeri alınarak saklanır, anahtarları benzersiz olmayabilir
(sınıf şablonu) [edit]

[düzenle] Taşıyıcı uyarlayıcıları

Taşıyıcı uyarlayıcıları (Container adaptors) dizi taşıyıcıları için farklı bir arayüz sağlar.

bir taşıyıcıyı yığın (LIFO: Son giren ilk çıkar) veri yapısına uyarlar
(sınıf şablonu) [edit]
bir taşıyıcıyı kuyruk (FIFO: İlk giren ilk çıkar) veri yapısına uyarlar
(sınıf şablonu) [edit]
bir taşıyıcıyı öncelik kuyruğu (priority queue) veri yapısına uyarlar
(sınıf şablonu) [edit]

[düzenle] span

A span is a non-owning view over a contiguous sequence of objects, the storage of which is owned by some other object.

(C++20)
a non-owning view over a contiguous sequence of objects
(sınıf şablonu) [edit]

[düzenle] Yineleyici geçersizleşmesi

Salt-okunur fonksiyonlar hiçbir zaman yineleyicileri veya referansları geçersiz yapmaz. Taşıyıcının içeriğini değiştiren fonksiyonlar ise aşağıdaki tabloda görüldüğü gibi bazen yineleyicileri ve/veya referansları geçersiz hale getirebilir.

Kategori Taşıyıcı Bir öğe eklendikten sonra... Bir öğe silindikten sonra... Eğer
yineleyiciler geçerli mi? referanslar geçerli mi? yineleyiciler geçerli mi? referanslar geçerli mi?
Dizi taşıyıcıları array N/A N/A
vector Hayır N/A Öğe eklemek kapasiteyi değiştirirse
Evet Evet Öğe(ler)i değiştirmeden önce ise
Hayır Hayır Öğe(ler)i değiştirme anında veya sonra ise
deque Hayır Evet Evet, silinen öğe(ler) hariç İlk veya son öğe değiştirildiyse
Hayır Hayır Sadece ortadan değiştirme yapıldıysa
list Evet Evet, silinen öğe(ler) hariç
forward_list Evet Evet, silinen öğe(ler) hariç
İlişkili taşıyıcılar set

multiset

map

multimap

Evet Evet, silinen öğe(ler) hariç
Sırasız ilişkili taşıyıcılar unordered_set

unordered_multiset

unordered_map

unordered_multimap

Hayır Evet N/A Öğe eklemek yeniden hash almaya neden olursa
Evet Evet, silinen öğe(ler) hariç Yeniden hash alınmazsa

Burada öğe ekleme ile taşıyıcıya bir ya da birden fazla öğe ekleyen foksiyonlardan, öğe silme ile de taşıyıcıdan bir veya birden fazla öğe silen fonksiyonlardan bahsedilir.

  • Öğe ekleyen fonksiyonlara std::set::insert, std::map::emplace, std::vector::push_back, ve std::deque::push_front örnek verilebilir.
    • Note that std::unordered_map::operator[] also counts, as it may insert an element into the map.
    • std::unordered_map::operator[]
  • Examples of erasure methods are std::set::erase, std::vector::pop_back, std::deque::pop_front, and std::map::clear.
    • clear invalidates all iterators and references. Because it erases all elements, this technically complies with the rules above.

The past-the-end iterator deserves particular mention. In general this iterator is invalidated as though it were a normal iterator to a non-erased element. So std::set::end is never invalidated, std::unordered_set::end is invalidated only on rehash, std::vector::end is always invalidated (since it is always after the modified elements), and so on.

There is one exception: an erasure which deletes the last element of a std::deque does invalidate the past-the-end iterator, even though it is not an erased element of the container (or an element at all). Combined with the general rules for std::deque iterators, the net result is that the only modifying operation which does not invalidate std::deque::end is an erasure which deletes the first element, but not the last.

İş parçacığı güvenliği

  1. Bütün taşıyıcı fonksiyonları farklı taşıyıcılar üzerinde ve farklı iş parçacıkları tarafından eşzamanlı olarak çağrılabilir. Daha genel olarak, C++ standart kitaplığı fonksiyonları, nesneler doğrudan ya da dolaylı olarak fonksiyon argümanları vasıtasıyla (this işaretçisi dahil) erişilebilir olmadığı sürece, başka iş parçacıkları tarafından erişilebilir olan nesneleri okumazlar.
  2. Bütün const üye fonksiyonları aynı taşıyıcı üzerinde ve farklı iş parçacıkları tarafından eşzamanlı olarak çağrılabilir. Bununla beraber, begin(), end(), rbegin(), rend(), front(), back(), data(), find(), lower_bound(), upper_bound(), equal_range(), at(), ve ilişkili taşıyıcılar hariç operator[], iş parçacığı güvenliği amacıyla const gibi davranır. (yani, onlar da aynı taşıyıcı üzerinde ve farklı iş parçacıkları tarafından eşzamanlı olarak çağrılabilir.) Daha genel olarak, C++ standart kitaplığı fonksiyonları, nesneler doğrudan ya da dolaylı olarak const-olmayan fonksiyon argümanları vasıtasıyla (this işaretçisi dahil) erişilebilir olmadığı sürece, başka iş parçacıkları tarafından erişilebilir olan nesneler üzerinde değişiklik yapmazlar.
  3. Aynı taşıyıcı üzerindeki farklı öğeler üzerinde, farkli iş parçacıkları tarafından eşzamanlı olarak değişiklik yapılabilir(std::vector<bool> hariç). Örneğin, std::future nesnelerini taşıyan bir std::vector birden fazla iş parçacığından veri alıyor olabilir.
  4. Iterator operations (e.g. incrementing an iterator) read, but do not modify the underlying container, and may be executed concurrently with operations on other iterators on the same container, with the const member functions, or reads from the elements. Container operations that invalidate any iterators modify the container and cannot be executed concurrently with any operations on existing iterators even if those iterators are not invalidated.
  5. Elements of the same container can be modified concurrently with those member functions that are not specified to access these elements. More generally, the C++ standard library functions do not read objects indirectly accessible through their arguments (including other elements of a container) except when required by its specification.
  6. In any case, container operations (as well as algorithms, or any other C++ standard library functions) may be parallelized internally as long as this does not change the user-visible results (e.g. std::transform may be parallelized, but not std::for_each which is specified to visit each element of a sequence in order)
(C++11'den beri)

[düzenle] Üye fonksiyon tablosu

- C++03'ten beri mevcut olan fonksiyonlar
- C++11'den beri mevcut olan fonksiyonlar
- C++17'den beri mevcut olan fonksiyonlar
- C++20'den beri mevcut olan fonksiyonlar
Dizi taşıyıcıları İlişkili taşıyıcılar Sırasız ilişkili taşıyıcılar Taşıyıcı uyarlayıcıları
Başlık dosyası <array> <vector> <deque> <forward_list> <list> <set> <map> <unordered_set> <unordered_map> <stack> <queue>
Taşıyıcı
array
vector
deque
forward_list
list
set
multiset
map
multimap
unordered_set
unordered_multiset
unordered_map
unordered_multimap
stack
queue
priority_queue
(constructor)
(implicit)
vector
deque
forward_list
list
set
multiset
map
multimap
unordered_set
unordered_multiset
unordered_map
unordered_multimap
stack
queue
priority_queue
(destructor)
(implicit)
~vector
~deque
~forward_list
~list
~set
~multiset
~map
~multimap
~unordered_set
~unordered_multiset
~unordered_map
~unordered_multimap
~stack
~queue
~priority_queue
operator=
(implicit)
operator=
operator=
operator=
operator=
operator=
operator=
operator=
operator=
operator=
operator=
operator=
operator=
operator=
operator=
operator=
assign
assign
assign
assign
assign
Iterators
begin
cbegin
begin
cbegin
begin
cbegin
begin
cbegin
begin
cbegin
begin
cbegin
begin
cbegin
begin
cbegin
begin
cbegin
begin
cbegin
begin
cbegin
begin
cbegin
begin
cbegin
begin
cbegin
end
cend
end
cend
end
cend
end
cend
end
cend
end
cend
end
cend
end
cend
end
cend
end
cend
end
cend
end
cend
end
cend
end
cend
rbegin
crbegin
rbegin
crbegin
rbegin
crbegin
rbegin
crbegin
rbegin
crbegin
rbegin
crbegin
rbegin
crbegin
rbegin
crbegin
rbegin
crbegin
rend
crend
rend
crend
rend
crend
rend
crend
rend
crend
rend
crend
rend
crend
rend
crend
rend
crend
Öğelere
erişim
at
at
at
at
at
at
operator[]
operator[]
operator[]
operator[]
operator[]
operator[]
data
data
data
front
front
front
front
front
front
front
top
back
back
back
back
back
top
back
Kapasite
empty
empty
empty
empty
empty
empty
empty
empty
empty
empty
empty
empty
empty
empty
empty
empty
empty
size
size
size
size
size
size
size
size
size
size
size
size
size
size
size
size
max_size
max_size
max_size
max_size
max_size
max_size
max_size
max_size
max_size
max_size
max_size
max_size
max_size
max_size
resize
resize
resize
resize
resize
capacity
capacity
bucket_count
bucket_count
bucket_count
bucket_count
reserve
reserve
reserve
reserve
reserve
reserve
shrink_to_fit
shrink_to_fit
shrink_to_fit
Modifiers
clear
clear
clear
clear
clear
clear
clear
clear
clear
clear
clear
clear
clear
insert
insert
insert
insert_after
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert_or_assign
insert_or_assign
insert_or_assign
emplace
emplace
emplace
emplace_after
emplace
emplace
emplace
emplace
emplace
emplace
emplace
emplace
emplace
emplace_hint
emplace_hint
emplace_hint
emplace_hint
emplace_hint
emplace_hint
emplace_hint
emplace_hint
emplace_hint
try_emplace
try_emplace
try_emplace
erase
erase
erase
erase_after
erase
erase
erase
erase
erase
erase
erase
erase
erase
push_front
push_front
push_front
push_front
emplace_front
emplace_front
emplace_front
emplace_front
pop_front
pop_front
pop_front
pop_front
pop
pop
push_back
push_back
push_back
push_back
push
push
push
emplace_back
emplace_back
emplace_back
emplace_back
emplace
emplace
emplace
pop_back
pop_back
pop_back
pop_back
pop
swap
swap
swap
swap
swap
swap
swap
swap
swap
swap
swap
swap
swap
swap
swap
swap
swap
merge
merge
merge
merge
merge
merge
merge
merge
merge
merge
merge
extract
extract
extract
extract
extract
extract
extract
extract
extract
Liste için işlemler
splice
splice_after
splice
remove
remove
remove
remove_if
remove_if
remove_if
reverse
reverse
reverse
unique
unique
unique
sort
sort
sort
Gözatma
count
count
count
count
count
count
count
count
count
find
find
find
find
find
find
find
find
find
contains
contains
contains
contains
contains
contains
contains
contains
contains
lower_bound
lower_bound
lower_bound
lower_bound
lower_bound
upper_bound
upper_bound
upper_bound
upper_bound
upper_bound
equal_range
equal_range
equal_range
equal_range
equal_range
equal_range
equal_range
equal_range
equal_range
Karşılaştırma
key_comp
key_comp
key_comp
key_comp
key_comp
value_comp
value_comp
value_comp
value_comp
value_comp
hash_function
hash_function
hash_function
hash_function
hash_function
key_eq
key_eq
key_eq
key_eq
key_eq
Allocator
get_allocator
get_allocator
get_allocator
get_allocator
get_allocator
get_allocator
get_allocator
get_allocator
get_allocator
get_allocator
get_allocator
get_allocator
get_allocator
Taşıyıcı
array
vector
deque
forward_list
list
set
multiset
map
multimap
unordered_set
unordered_multiset
unordered_map
unordered_multimap
stack
queue
priority_queue
Dizi taşıyıcıları İlişkili taşıyıcılar Sırasız ilişkili taşıyıcılar Taşıyıcı uyarlayıcıları