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:
ya arkadaşlar c++ da vector kullanarak bir array oluşturduk diyelim. atıyorum 100000 birimli bir vector. bu kadar vectore nasıl değer verebilirim? for döngüsüyle olacak da bir türlü oturtamadım fikri.

yani

vector N(100000);

gibi bir tanımla
N'in her bir öğesine arka arkaya olmak üzere sayı vermem gerek.

N[0]=0
N[1]=1
.
.
.
N[99999]=99999

gibi.
sonra shuffle fonksiyonuyla bunların sırasını karıştırıp, sonra kendi yaptığım sort fonksiyonuyla sıraya dizilebilmesi lazım.
Mesaj tarihi:
Örnek:

vector<int> veryBigVectorForMrLevie;
const int veryBigSize = 100000;

for (int i = 0; i < veryBigSize; i++) {
veryBigVectorForMrLevie.push_back(i);
}

ilk önce boş bir vector oluşturup, push_back ile vektörün sonuna eleman ekliyorsun. İstediğin elemana ulaşmak için veryBigVectorForMrLevie.at(index) kullanabilirsin.

Şunlara da bir göz at detaylı bilgi için:

http://www.cppreference.com/cppvector/index.html
http://www.cplusplus.com/reference/stl/vector/vector.html
Mesaj tarihi:

Mirage said:
Örnek:

vector<int> veryBigVectorForMrLevie;
const int veryBigSize = 100000;

for (int i = 0; i < veryBigSize; i++) {
veryBigVectorForMrLevie.push_back(i);
}

ilk önce boş bir vector oluşturup, push_back ile vektörün sonuna eleman ekliyorsun. İstediğin elemana ulaşmak için veryBigVectorForMrLevie.at(index) kullanabilirsin.

Şunlara da bir göz at detaylı bilgi için:

http://www.cppreference.com/cppvector/index.html
http://www.cplusplus.com/reference/stl/vector/vector.html



sağolasın uğraşmışsın da bu benim bilmemkaçıncı öğeme bilmemkaç değerini veriyor mu? ben bulamadım:(
Mesaj tarihi:
Vektörü yukardaki şekilde oluşturduğunda içi boş. for döngüsünde i 0 başlıyor. push_back ile ilk elemanı koyduğunda vektörün 0. index'ine 0 değeri veriyorsun. bir sonraki iterasyonda 1. index'ine 1 değerini veriyorsun. Öyle gidiyor.

Edit:

İlla array kullanır gibi yapmak istiyorsan boş vektör yaratmak yerine veryBigSize elemanlı bir vektör yaratıp şöyle bir döngü ile de doldurabilirsin:

for (int i = 0; i < veryBigSize; i++) {
veryBigVectorForMrLevie[i] = i;
}
Mesaj tarihi:
std::vector oldugunu tahmin ediyorum
evet verir.

eger random_shuffle yapmak istiyosan

using std::vector;
using std::random_shuffle;

std::vector<int> mVector;
int bigNum(10000);

for (int i = 0; i < bigNum; i++)
{
mVector.push_back(i);
}
//buraya kadar ustteki kodla ayni

std::random_shuffle(mVector.begin(), mVector.end());


.begin ve .end() fonksiyonlari iterator dondurur basina ve sonuna, random shuffle in O(n) olmasi lazim/

Eger kendin sort u yazacaksan iterator kabul etsin, boylece tum vector u variable olarak gecirip stackini sisirmezsin. Iteratorler integer olarak degerlendirilebilir (yani vector::iterator it = mVector.begin(); varsa, bu it++ dedigin zaman bi sonraki element e gecer vectorde)

std::vector random_access iterator kullandigi icin yapacagin tum access islemleri O(1) olacak. Rahat rahat index kullanip da cagirabilirsin bir seyler.
Mesaj tarihi:
tamam bakayım:)

yahu anladım anlamasına da kodlar birbirine girdi deliricem.
allahtan 3 gün daha var.

şimdi bakın benden istenen olay şu;

integer vector yarat
N olarak vectorün içermesini istediğin max sayı ata.
vectorü 0 dan N e kadar sayılarla doldur
vectorü shuffle kullanarak sırasını karıştır
sonra artan sırayla saymasını sağla (ascending selection sort algorithm)[fonksiyonu kullanamıoz kendimiz yazıcaz]

şimdi sizin yardımlarınızla da şöyle karmakarışık bir kod yazdım ama neyi düzeltmem lazım hiç bi fikrim yok:(

Yazdığım kod


#include <cstdlib>
#include <iostream>
#include <vector>

using namespace std;

int main(void)
{
vector<int> N(100000);
int maxsize,b,a,min;

maxsize=N.size();

for (int i = 0; i < maxsize; i++)
{
N[i] = i;
}
random_shuffle(N.begin(), N.end());

// buradan aşağısı vikipedianın pseudocodeundan alıp yazdığım ascending selection sort(yanlış da olaiblir)
for(a=0; a<maxsize-2; a++)
{
min=a;

for(b=a+1; b<maxsize-1;b++)
{
if(N[b]<N[min])
{min=b;}

swap(N[a],N[min]);
}

}




system("PAUSE");
return EXIT_SUCCESS;
}




Mirage: Kodu biçimlendirilmiş yazıya çevirdim. Okunmuyor öbür türlü.
Mesaj tarihi:
Valla C++ tecrübem pek yok, detaylı da bakamadım ama bana doğru gözüktü. Karmakarışık olmasının sebebi her şeyin tek fonksiyon içinde bulunması. Şu iki kısım için iki ayrı fonksiyon tanımla:

for (int i = 0; i < maxsize; i++)
{
N[i] = i;
}

[hr]

for(a=0; a<maxsize-2; a++)
{
min=a;

for(b=a+1; b<maxsize-1;b++)
{
if(N[b]<N[min])
{min=b;}

swap(N[a],N[min]);
}
}

Sonuç olarak ana kod aşağı yukarı şöyle gözükecek yani:

vector<int> N(100000);
initialize(N); // burda dolduruyorsun
random_shuffle(N.begin(), N.end()); // burda karıştırıyorsun
sort_ascending(N); // burda sıralıyorsun
Mesaj tarihi:
wiki yi yanlis okumussun ilk basta :)

swap ilk for loop un icinde olacak, ikincinin degil.

Hala calismadi gerci, zamanim olsa yapardim, ama bir kac yerden daha arastirip calisacagina emin oldugun (kendin oturup kanitlarsan calistigini anlamana yardimci olur) bi algoritma kullanman yararina olur.
Mesaj tarihi:
bir de orada sort kısmını cout fonksiyonuyla nasıl kullanacağım onu beceremedim. yani ekrana basması için sırayla.

@volfied: yanlış okumuş olcağımın farkındayım:) tek hata o mu peki?
Mesaj tarihi:
yanlis wikiye bakmissin, benim baktigimda oyle yazmiyodu

swap i ve maxsize olaylarini duzeltirsen sorunun duzelir

eger ciddi ciddi CS okumak istiyorsan, bu tur sort algoritmalarini kagit kalemle yazip cizip anlarsan sana inanilmaz derecede yardimlari olur ilerde.
Mesaj tarihi:
Volfied said:
major un CS degil dimi? bunlarin turkce terimlerini ogrenmem lazim benim konusamiyorum Turkiyedeki ogrencilerle :/


aslında ben sistem mühendisliği okuyorum. içinde c ve C++ ve java da veriyorlar haliyle

anadal demeye çalıştın heralde?
Mesaj tarihi:

#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <conio.h>

using namespace std;

int main()
{
vector<int> N(10);
int maxsize,b,a,min;
maxsize=N.size();

for (int i = 0; i < maxsize; i++)
{
N[i] = i;
cout << N[i] << endl;
}

cout << "Vektor dolduruldu" << endl;

random_shuffle(N.begin(), N.end());

for(a=0; a<maxsize; a++)
{
min=a;

for(b=a+1; b<maxsize;b++)
{

if(N[b]<N[min])
{
min=b;
}

}
swap(N[a],N[min]);
}

for(int j=0; j<maxsize; j++)
{
cout << N[j] << endl;
}

getch();
return 0;
}


edit:// sorting olayı çalışır halde
×
×
  • Yeni Oluştur...