Eleman Silme
Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası — ders 16 / 56.
Bazen artık ihtiyaç duyulmadığında bir vektörden öğeleri kaldırmanız gerekir. Vektörler, .erase() yöntemiyle bir yineleyici (iterator) kullanmanızı gerektirir. Öğeleri değere göre kaldırmak için std::find() ile .erase() yöntemini birleştirebilirsiniz.
Bir vektörden bir elemanı şu şekilde silebilirsiniz:
std::vector<int> numbers = {10, 20, 30, 40};
auto it = std::find(numbers.begin(), numbers.end(), 20);
if (it != numbers.end()) {
numbers.erase(it); // Yineleyici konumundaki öğeyi kaldırır
}erase() fonksiyonunu çağırdıktan sonra, o konumdaki öğe kaldırılır ve sonraki tüm öğeler aşağı kayar. Mevcut olmayan bir öğeyi bulmaya ve silmeye çalışırsanız, find() fonksiyonu end() değerini döndürür ve bunu kontrol etmek hataları önler.
Bu desen, öğe kaldırmayı güvenli ve öngörülebilir kılar. Kullanıcı girdisine veya program mantığına dayalı olarak belirli öğeleri çıkarmanız gereken dinamik koleksiyonları yönetmek için özellikle kullanışlıdır. Silme işleminden önce yineleyicinin (iterator) geçerli olup olmadığını her zaman kontrol etmeyi unutmayın.
Görev
Kolaystd::find() ile birleştirilmiş .erase() yöntemini kullanarak bir std::vector içinden öğelerin kaldırılmasını gösteren bir program oluşturun. Bu zorluk, belirli öğeleri bir vektörden güvenli bir şekilde nasıl kaldıracağınızı ve sonuçları nasıl gözlemleyeceğinizi anlama yeteneğinizi test edecektir.
Aşağıdaki girdiler sağlanacaktır:
- Vektöre başlangıçta eklenecek öğe sayısını temsil eden bir tam sayı
n - Ardından vektöre eklenecek
nadet tam sayı - Kaldırılacak öğe sayısını temsil eden bir tam sayı
m - Ardından vektörden kaldırılacak öğeleri temsil eden
madet tam sayı
Programınız şunları yapmalıdır:
- Boş bir
std::vector<int>oluşturun - Eklenecek öğe sayısını okuyun ve bunları
.push_back()kullanarak vektöre ekleyin - Tüm eklemelerden sonra başlangıç vektör boyutunu yazdırın
- Kaldırılacak öğe sayısını okuyun
- Kaldırılacak her bir öğe için, öğeyi bulmak üzere
std::find()kullanın, ardından bulunursa kaldırmak için.erase()kullanın - Her kaldırma denemesinden sonra, vektörün mevcut boyutunu yazdırın
- Son olarak, vektörde kalan öğeler arasında gezinin ve bunları sırayla yazdırın
Aşağıdaki tam çıktı formatını kullanın:
Başlangıç vektör boyutu:
Initial size: [size]Her kaldırma denemesinden sonra:
After removing [number]: size = [current_size]Son kalan öğeler:
Remaining elements: [element1] [element2] [element3] ....erase() yönteminin bir yineleyici (iterator) gerektirdiğini unutmayın, bu nedenle öğeyi bulmak için önce std::find() kullanmalısınız. Silmeden önce her zaman öğenin bulunup bulunmadığını kontrol edin. Kalan öğeleri mevcut sıralarıyla yazdırmak için aralık tabanlı (range-based) bir for döngüsü kullanın.
Kopya kağıdı
Bir vektörden belirli bir öğeyi kaldırmak için .erase() ile birleştirilmiş std::find() kullanın:
std::vector<int> numbers = {10, 20, 30, 40};
auto it = std::find(numbers.begin(), numbers.end(), 20);
if (it != numbers.end()) {
numbers.erase(it); // Yineleyici konumundaki öğeyi kaldırır
}Tanımsız davranıştan kaçınmak için silme işleminden önce her zaman yineleyicinin end() değerine eşit olmadığını kontrol edin. .erase() yöntemi doğrudan bir değer değil, bir yineleyici gerektirir.
Kendin dene
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// Eklenecek eleman sayısını oku
int n;
cin >> n;
// Boş bir vektör oluştur
vector<int> myVector;
// n adet elemanı oku ve ekle
for (int i = 0; i < n; i++) {
int element;
cin >> element;
// Elemanı vektöre ekle
}
// Çıkarılacak eleman sayısını oku
int m;
cin >> m;
// TODO: Kodunuzu aşağıya yazın
// 1. Başlangıç vektör boyutunu yazdır
// 2. Çıkarılacak her bir eleman için, elemanı bul ve .erase() kullanıp her silme işleminden sonra boyutu yazdır
// 3. Vektörde kalan elemanları yazdır
return 0;
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık & Akış bölümündeki tüm dersler
1İşaretçiler ve Bellek
İşaretçi Nedir?Adres OperatörüDereference OperatörüNull İşaretçilerİşaretçiler ve Diziler'new' ile Dinamik Bellek'delete' ile Belleği Serbest BırakmaÖzet - İşaretçi Pratiği2Vektörler (Dinamik Diziler)
std::vector'a GirişBir Vektör OluşturmaEleman EklemeElemanlara ErişmeVektör BoyutuFor Döngüsü ile YinelemeAralık Tabanlı For DöngüsüEleman SilmeÖzet - Vektör İşlemleri3Proje: Görev Listesi Aracı
Projeye Genel BakışGörev Ekleme