c++ ile foreach döngüsü?
c++ ile foreach döngüsü?
arkadaşlar, bütün internetin altını üstüne getirdim ama ilginç bir şekilde şu foreach tipi döngünün c++´da nasıl kullanıldığını bulamadım. onbinlerce sayfa döküman taradım ama birisi kalkıpda daha yok kardeşim kullanamıyorsun da yazmamış.yada benim kafa basmadı. php veya perl gibi daha yüzeysel dillerde şu şekilde oluşturulan bir döngüyü, c++ ile nasıl elde edebilirim?
php´de şöyle
foreach(dolardizi_degisken as dolaricerik)
{
// icerik ile her ne yapmak istiyor isen
}
bu döngü´de içeriği yada yapısı ne olursa olsun, her döngüde dizinin bir sonraki elemanının verisi dolaricerik değişkenine aktarılıyor ve böylece her eleman üzerinde ayrı ayrı işlem yapabiliyorsunuz. dizi değişkenin içeriğinde kaç adet eleman olduğunu bilmeniz gerekmiyor.
c++ ile bunun gibi bir döngü oluşturabilir miyim? yada, bir dizi değişkenin içinde kaç eleman bulunduğunu öğrenebilir miyim?
yani ne bilim mesela count() gibi bi fonksiyon var mı?
opengl ile bir sahne sınıfı oluşturucam ama poligonların vertex sayıları değişken olabileceğinden her poligon için aynı vertex sayısını tanımlamakla sahne esnekliği kaybolmuş olucak,her poligon oluşumunda vertex sayısını poligon sınıfına kaydetmek mantıklı olabilir. ama foreach gibi bir fonksiyonun varlığı olması gerektiği beynimden çıkmıyor.
amacımı da anlatayım belki farklı çözümleri olan arkadaşlar vardır :
sahne
|
|---nesne
| |
| |---poligon0
| | |
| | |---vertex0
| | |---vertex1
| | |---vertex2
| | |---vertex3
| | |---vertex4
| | |---vertex5
| | |---vertex6
| |
| |---poligon1
| | |
| | |---vertex0
| | |---vertex1
| | |---vertex2
| |
| |---poligon2
| | |
| | |---vertex0
| | |---vertex1
| | |---vertex2
| | |---vertex3
| | |---vertex4
ilgili fonksiyonun görevi ---
nesneciz{
poligon_sayan_dongu(donguparametresi=PoligonNo)
{
vertex_sayan_dongu(donguparametresi=SiradakiVertexNo)
{
VertexCiz(Nesne.poligonlar[PoligonNo].vertexler[SiradakiVertexNo]);
}
}
}
gibisinden bir döngüye ihtiyacım var. ama yapmam gereken, kaç poligon olduğunu bilmeden döngü yaptırtmak.
Cvp
c++´da dizilerin eleman sayıları sabittir, önceden tanımlarsın. esnek diziler istiyorsan "vector"leri incele.
foreach benzeri bir döngüyü elle oluşturman gerekiyor:
örneğin:
// kodun başına vektör kütüphanesini ekliyorsun,
#include <vector>
//.....
//.....
vector<int> bizimVektor(20); // 20 elemanlı vektör
int v, i
// bazı değerler yazalım vektöre:
for(i=0; i<bizimVektor.size(); i++) bizimVektor=i*i;
// içeriğini yazalım: (foreach gibi çalıştırıyoruz)
for(i=0, v=0; i<bizimVektor.size(); i++, v=bizimVektor) cout << v << " ";
cout << "
";
// eleman ekleyelim:
for(i=0; i<10; i++) bizimVektor.push_back(i + 10);
// tekrar içeriği yazalım:
for(i=0, v=0; i<bizimVektor.size(); i++, v=bizimVektor) cout << v << " ";
cout << "
";
// içeriği mıncıklayalım:
for(i=0; i<bizimVektor.size(); i++) bizimVektor /= 2
// tekrar içeriği yazalım:
for(i=0, v=0; i<bizimVektor.size(); i++, v=bizimVektor) cout << v << " ";
cout << "
";
//.....
//.....
Cvp
bu arada c/c++ ile ilgili süper bi kaynak: Herb Schildt´in Borland C++ Builder - The Complete Reference adlı kitabı.
Cvp
teşekkür ederim. anlaşılan o ki tek başına çıkılmaz bu işin içinden :) prof bi uzmana yaptırtmak en iyisi...
Cvp
yok sadece o değil daha bir çok konu var :)... benim kafa basar algoritmaya ama oturup kod´a dökemez işte
Cvp
c/c++ ´dan uzun bir süredir uzak kaldım ama önceden belli olmayan ya da değişken yapılı diziler için araştırman gereken anahtar kelime "Pointer" olması gerekiyor...
Cvp
bu arada vector, list, stack, map gibi container classları için algorithms kütüphanesi ile for_each geliyor.