Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Vector doldurma [C++]


Öne çıkan mesajlar

Mesaj tarihi:
çok hızlıca kodu düzenleyip yazdım. ikinci for döngüsünün hiçbir işlevi yok gibi

edit://

ben random istiyorsun sanıyordum, arada yazılanları dikkatli okumamışım eheh. bir baştan okiyim konuyu
Mesaj tarihi:
en başta hatalı bişiler gördüm uykulu uykulu yazıyorum

vector<int> vect(10);


diye initialize ederseniz push_back yapmayın, çünkü içeriye 10 tane default element atmış oluyor.

vector<int> vec();
vec.reserve(10);


dedikten sora push_back le yardırın. yani şöyle;

vector<int> x,y,z(100);
x.reserve(100);
y.resize(100);

cout << x.size() << " " << y.size() << " " << z.size();


ün çıktısı

0 100 100


y ve z nin içi default int le dolu (vc++ debug için 0xcccccc olur herhal..)

bi de böyle deli gibi insert yapıyorsanız deque kullanın. vector insert inin worst case time complexitysi O(n) deque nun O(1)

aradaki postları okumadım önceden söylendiyse sori.
Mesaj tarihi:
Ben ve Volfied push_back fikrini söylemiştik. İkimiz de default constructor kullanmışız.

vector<int> n;

şeklinde. Burda bir sorun yok yani.

İkimiz de reserve kullanmamışız. Ben push_back gerektiğinde vektör kapasitesini dinamik olarak arttırır diye düşünmüştüm. Öyle değil mi yoksa optimizasyon için mi kullanıyorsun reserve'ü? (Önceden istediğim kapasiteyi vereyim de zırt pırt arttırmasın dinamik olarak diye)
Mesaj tarihi:
evet reserve tamamen optimizasyon amaçlı. herkeş kullanmalı.

vec.reserve(N) minimum N elemanı reallocate+copy yapmadan push_back etmeye yetecek kadar yer ayırıyor. ama size ı 0 kalıyor.
Mesaj tarihi:
push_back size'ı her seferinde 1 arttırıyor. Size vektör içinde kaç eleman olduğunu belirtiyor.

Biz kapasiteden bahsediyorduk. Her vektörün size dışında bir de kapasitesi var. Kapasite vektörün bellekte kaç elemanlık yer ayırdığını belirtiyor. push_back bu kapasiteyi gerektiği zaman dinamik olarak arttırıyor.

100000 kere push_back yaptığın zaman bellek ayrılan yer yetmediği için defalarca dinamik olarak kapasitenin artması gerekecek. Bu yüzden, eğer ilk baştan vektörün 100000 elemanlı olacağını biliyorsan, kapasiteyi dinamik olarak arttırmanın anlamı yok. İlk baştan reserve ile kapasiteyi belirleyip bellekte 100000 elemanlık yer ayırıyorsun. Böylece gereksiz bellek operasyonlarından kurtulmuş oluyorsun. Optimizasyon amaçlı yani.
×
×
  • Yeni Oluştur...