C++ İşlevinden Dizi Döndür

Return Array From Function C



Diziler, aynı veri türünde değerlere sahip özel kapsayıcılardır. C++'daki işlevler diziler üzerinde işlemler gerçekleştirir ve bu diziler daha sonra ana işleve döndürülür. Bu fenomeni tanımlamak için birçok yaklaşım vardır. Bu kılavuzda, bazı yaygın yöntemler açıklanmıştır:

Statik Diziyi Döndürmek için İşaretçileri Kullanın

Normal bir dizi kullandığımızda, bir çeşit anormal sonuç alma şansımız var. Bunu önlemek için C++ kodumuzda statik bir dizi kullanıyoruz. Kullandığımız örneği anlayalım. Bu fonksiyonda, burada bahsedildiği gibi dönüş tipinde 5 değerli bir dizi tanımladık.







Int *işlev ()



Değer bir tamsayı türü olacağından aşağıdaki örnekte int olarak etiketlenmiştir. Fonksiyonu bir işaretçi olarak tanıttığımız için, işlev bir işaretçi tipi olacaktır. Değerler girildikten sonra ana programa bir dizi döndürülür.







Ana programda bir fonksiyon çağrısı yaptık. Fonksiyondan döndürülen değeri kabul etmek için bir tamsayı değişkeni kullanacağız. Dizi döndürüldüğünde, değerlerine kolayca erişebiliriz. Değerler manuel olarak yazdırılacaktır.

Int*Işaretçi=işlev();

İşaretçinin amacı, dizinin birinci dizininde bulunan öğeyi bulmaktır. Başka bir deyişle, dizideki değerin adresini gösterir. Ardından, işaretçiyi döndürecek bir işlev prototipi kullanırız.



İşlev aracılığıyla döndürülen dizinin çıktısını görmek için Linux durumunda Ubuntu terminaline erişimimiz olması gerekir. Bunun nedeni, çıktının Linux terminali aracılığıyla erişilebilir olmasıdır. Linux'ta herhangi bir metin düzenleyicide yazılmış C++ kodlarını çalıştırmak için bir derleyiciye ihtiyacımız var. Bu derleme G++ ile yapılır. -o çıktıyı bir dosyada saklamak için kullanılır. Burada çıktı dosyasına ve kaynak kod dosyasına ihtiyacımız var. Derlemeden sonra kodu çalıştıracağız:

$g++ -veyadosya1 dosya1.c
$./dosya1

Çıktıdan, fonksiyonda başlatılan dizinin ana fonksiyonda statik bir dizi kullanılarak görüntülendiğini, manuel olarak ve işaretçiler aracılığıyla başlatıldığını görebiliriz.

İşaretçileri Kullanarak Dinamik Olarak Ayrılan Diziyi Döndür

Diziler, dinamik ayırma kullanılarak döndürülebilir. Diziler, new kelimesi kullanılarak dinamik olarak tahsis edilebilir. Biz onları silene kadar orada kalacaklar. Statik dizilerin boyutu sabittir; bu, başlatma sırasında boyut sağlamanız gerektiği anlamına gelir. Dizi oluşturulduktan sonra, çalışma zamanında veya sonrasında boyutu artırmak zordur. Ancak dinamik dizi durumunda, içine değer girdikçe genişlediği için istediğimiz zaman daha fazla öğe ekleyebiliriz. Bu yüzden herhangi bir boyut belirtmemize veya tanımlamamıza gerek yok.

Burada kullandığımız örneğe doğru ilerliyoruz. Statik dizilerle işaretçiler kullandığımız önceki örneklerde olduğu gibi işaretçilerle dinamik bir dizi kullandık.

Int*işlev()

İşlev bildiriminden sonra diziler dinamik olarak bildirilir:

Int*dizi= yeni int [100];

Yeni terimi, sürekli olarak dinamik bir dizi oluşturmak için kullanılır. İçerisine değerler girerek dizi üzerinde işlemler gerçekleştireceğiz. Bundan sonra dizi ana programa döndürülür:

Şimdi ana işlevi düşünün. Fonksiyon çağrısını yaptık. Dizi döndürüldüğünde, değeri kabul etmek için bir işaretçi tamsayı tipi değişken ekliyoruz.

Int*Işaretçi=işlev();

Dizide saklanan değerler manuel olarak yazdırılır. Çıktı, derleme ve yürütme yöntemiyle elde edilir.

Yapıları Kullanarak Diziyi Döndür

Yapılar diziler gibi kapsayıcılardır. Ancak dizi, bir seferde aynı veri türünün değerini içerir. Ve yapılar söz konusu olduğunda, birden fazla veri türü değeri içerirler. Sample isimli bir yapı aldık. Burada dizi bildirimi, işlevler yerine yapıların içindedir. Dönüş türü yapının adıdır. Yapı değişkeni ana programa döndürülür. Yapı, bildirim için struct kelimesini kullanır.

yapı örneği
{
Int arr[100];
};

Yapı bildiriminden sonra, bir yapı nesnesinin oluşturulduğu bir fonksiyon kullandık. Bu nesne yapıya erişmek için kullanılacaktır. Bu fonksiyon, yapının nesnesini ana fonksiyona döndürür, böylece diziyi bu nesne aracılığıyla yazdırabiliriz. Bir değişken, değişkendeki değerleri alır. Bu değer, diziye en fazla değer gireceğimiz tam sayıdır. Bu örnekte olduğu gibi sayı olarak 6 seçtik. Böylece diziye 6'ya kadar sayılar girilecektir.

Yapı örneği işlevi(intn)

Şimdi ana programa doğru ilerleyerek diziye şu şekilde erişmek için bir nesne yarattık:

Yapı örneği x;

Nesne başlatma işleminden sonra, diziye sayıların girilmesini istediğimiz değişkene bir değer eklenir. Bir fonksiyon çağrısında, parametredeki değeri ileteceğiz:

x=işlev(n);

For döngüsünü kullanarak ekrana sahip olacağız. Değerler, ana programın başlangıcında bildirilen nesne aracılığıyla görüntülenir:

Çıktı, programa 6 sayı girdiğimiz için sonuçta 6 değerin gösterildiğini gösterir.

Std Kullanarak Diziyi Döndür

C++, işlevden bir dizi döndürmek için birçok yöntem kullanır. Bunlardan biri std::array aracılığıyla. Bu bir yapı şablonudur. Bu özellik ayrıca size () ve boş () olmak üzere iki işlev daha sağlar. Tüm dizinin ana programa döndürüldüğünü belirten bir dizi adı döndürülür. Burada bir başlık dosyası dizisi ekleyeceğiz. Kütüphaneye ek olarak, dizinin tüm fonksiyonlarını içerir.

#Dahil etmek

dizi<int,10>işlev()

Tüm diziyi adıyla döndürebildiğimiz için, bir işlevin bildiriminde diziyi bir dönüş türü olarak kullanacağız. Diziye veri girilir. Bundan sonra dizi ana programa döndürülecektir. Ana fonksiyona doğru hareket edildiğinde, fonksiyon çağrıldığında bir dizi değişkeni diziyi kabul edecektir.

varış=işlev();

Yine dizi değerlerini görüntülemek için for döngüsü kullanılacaktır. Aşağıda gösterilen görüntüden çıktıyı gözlemliyoruz. 10 beden kullandığımız için 0 rakam girilecektir. Bu nedenle, bunlar görüntülenir:

Vektör Konteyneri Üzerinden Dizi Dönüşü

Bu yaklaşım, dinamik olarak ayrılmış bir dizidir. Bu durumda olduğu gibi, dizi boyutunu belirtmeye gerek yoktur. Burada herhangi bir boyut parametresine ihtiyacımız yok. Bu örneği kullanarak, kütüphaneye vektörün işlevlerini içeren bir vektör başlığı eklememiz gerekiyor.

Dönüş türünün de bir int vektörü olduğu ve parametrede argüman olarak bir vektör işaretçisi içerdiği işleve doğru hareket. Burada temp adında bir dizi tanıtılır:

Vektör<int>MultiplyArrayByTwo(constvektör<int> *varış)

İşlev, tmp.push_back() işlevini kullanarak dizinin öğelerini ikiyle çarpacaktır. Ardından, tmp'yi döndürün. Otomatik tip bir değişken, fonksiyondan dizinin değerlerini kabul edecektir. Dizi, içindeki öğeleri içerir.

Çıktı, vektör konteynerinin çalışmasını gösterir.

Çözüm

Yukarıda bahsedilen makalede, işlevden bir dizi döndürmenin işlevselliğini açıklamak için en sık kullanılan beş yöntemi açıkladık.