C++ Vector insert() Kullanımı
Bu Rehberde Ne Öğreneceksiniz?
Bu rehberde, C++’ta std::vector::insert() metodunu adım adım öğreneceksiniz.
Bu metot, dinamik dizilere (vektörlere) belirli bir konuma tek bir değer, aynı değerin birden çok kopyası veya başka bir vektörün içeriğini eklemenizi sağlar.
Teknik Özet
insert() metodu, vektör içerisine eleman ekleme işlemini yönetir.
Ekleme sırasında elemanların yerleri bellekte otomatik olarak kaydırılır.
Fonksiyon, eklenen ilk elemana işaret eden bir iterator döndürür.
Kullanım Senaryoları:
- Belirli bir konuma tek bir değer ekleme
- Aynı değeri birden çok kez ekleme
- Başka bir vektörün elemanlarını aktarma
Temel İşlev: Tek Bir Değer Ekleme
Bir vektörün herhangi bir konumuna tek bir değer eklemek için insert() fonksiyonuna bir iterator (konum) ve eklenecek değeri parametre olarak vermeniz yeterlidir.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> sunucu_ip {1, 2, 3, 4, 5};
cout << "Başlangıç Vektörü: ";
for (int val : sunucu_ip) cout << " " << val;
// Vektörün başına 10 değerini ekler
sunucu_ip.insert(sunucu_ip.begin(), 10);
cout << "\nGüncel Vektör: ";
for (int val : sunucu_ip) cout << " " << val;
return 0;
}
vec.begin() vektörün ilk elemanını temsil eder.
- Bu örnekte 10 değeri, vektörün başına eklenmiştir.
Çoklu Ekleme: Aynı Değeri Tekrarlama
Aynı değeri birden fazla kez eklemek için insert() metoduna tekrar sayısını ve değeri parametre olarak verin.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> islem_kodlari {10, 20, 30, 40};
cout << "Başlangıç Vektörü: ";
for (int val : islem_kodlari) cout << " " << val;
// Sonuna "100" değerini 3 kez ekler
islem_kodlari.insert(islem_kodlari.end(), 3, 100);
cout << "\nGüncel Vektör: ";
for (int val : islem_kodlari) cout << " " << val;
return 0;
}
- insert(pos, n, value) formu, aynı değeri n kez eklemenizi sağlar. Burada 100 değeri 3 kez, vektörün sonuna eklenmiştir.
Aralıklı Ekleme: Başka Bir Vektörün İçeriğini Aktarma
Bir vektörün içeriğini başka bir vektöre aktarmak için insert() fonksiyonuna başlangıç ve bitiş iteratorlarını geçmeniz yeterlidir.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> hedef_vektor {2, 4, 6, 8};
vector<int> kaynak_vektor {1, 3, 5, 7};
cout << "Hedef Vektör: ";
for (int val : hedef_vektor) cout << " " << val;
// Kaynak vektörün elemanlarını hedef vektörün başına ekler
hedef_vektor.insert(hedef_vektor.begin(), kaynak_vektor.begin(), kaynak_vektor.end());
cout << "\nBirleştirilmiş Vektör: ";
for (int val : hedef_vektor) cout << " " << val;
return 0;
}
- Bu işlem, merge veya veri birleştirme işlemleri için oldukça kullanışlıdır.
insert() Kullanım Özeti
| Kullanım Biçimi | Parametreler | Açıklama |
|---|---|---|
insert(pos, value) | Tek değer | Belirtilen konuma bir eleman ekler |
insert(pos, n, value) | Tekrar sayısı + değer | Aynı değeri birden fazla ekler |
insert(pos, start, end) | Iterator aralığı | Başka bir vektörden eleman ekler |
Performans ve Alternatifler
| İşlem Türü | Zaman Karmaşıklığı | Notlar |
|---|---|---|
| Başta/Ortada ekleme | O(n) | Elemanlar bellekte kaydırılır |
Sona ekleme (push_back()) | Amortismanlı O(1) | En verimli yöntem |
insert() sonrası iteratorlar | Geçersizleşebilir | Yeniden alınmalıdır |
Eğer sıklıkla başa veya ortaya ekleme yapmanız gerekiyorsa std::deque veya std::list tercih edin.
Sıkça Sorulan Sorular (SSS)
- insert() fonksiyonu performansı nasıl etkiler?
Ekleme pozisyonuna göre O(n) karmaşıklığa sahiptir. Ortaya veya başa ekleme pahalıdır.
- Sona eleman eklemenin en verimli yolu nedir?
push_back() metodu, insert(vec.end(), value) yöntemine göre daha hızlıdır.
- insert() ne döndürür?
Eklenen ilk elemana işaret eden bir iterator döndürür.
- Alternatif veri yapısı kullanmalı mıyım?
Sürekli ekleme/çıkarma yapıyorsanız std::list veya std::deque daha uygundur.
Sonuç
C++’ta std::vector::insert() metodu, dinamik dizilere esnek şekilde eleman eklemenin standart yoludur. Ancak, performans gereksinimlerinize göre doğru metodu seçmek önemlidir. Kısa ömürlü eklemelerde insert(), sürekli veri büyütmelerinde ise push_back() tercih edilmelidir.
Bu örnekleri GenixNode platformunda kendi sanal sunucunuzda hemen deneyebilir, performans farklarını gözlemleyebilirsiniz.

