Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

std::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 n adet 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 m adet tam sayı

Programınız şunları yapmalıdır:

  1. Boş bir std::vector<int> oluşturun
  2. Eklenecek öğe sayısını okuyun ve bunları .push_back() kullanarak vektöre ekleyin
  3. Tüm eklemelerden sonra başlangıç vektör boyutunu yazdırın
  4. Kaldırılacak öğe sayısını okuyun
  5. 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
  6. Her kaldırma denemesinden sonra, vektörün mevcut boyutunu yazdırın
  7. 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;
}
quiz iconKendini test et

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