Diziler kompüter proqramlarında ən çox istifadə edilən strukturlaşdırılmış məlumatların saxlanılması formalarından biridir. Onların işlənməsi sinif metodları və funksiyalarında tətbiq olunan müxtəlif alqoritmlər tərəfindən edilə bilər. Buna görə, tez-tez bir funksiyanı bir sıra ötürmək tələb olunur. C və C ++ dilləri bu hərəkəti həyata keçirmək üsullarını seçməkdə böyük sərbəstlik təqdim edir.
Vacibdir
C və C ++ dillərinin tərtibçiləri
Təlimat
Addım 1
Fəaliyyətə sabit ölçülü bir sıra ötürün. Müvafiq tipli bir arqument ehtiva etmək üçün funksiyanın prototipini dəyişdirin. Məsələn, üç elementin ədədi ədədi dəyərlərini bir parametr olaraq qəbul edən bir funksiyanın parametr kimi göstərilməsi belə ola bilər:
boş ArrayFunction (int aNumbers [3]);
Belə bir funksiyaya bir sıra birbaşa arqument kimi ötürülməklə çağırılır:
boşluq Bəzi İşlev ()
{
int aNumbers = {1, 2, 3};
ArrayFunction (aNumbers);
}
Aktarılan məlumatlar yığına köçürülür. Dizinin çağırılan funksiyada dəyişdirilməsi mənbəyi dəyişdirmir.
Addım 2
Dəyişən uzunluqlu massivləri funksiyaya ötürün. Bunu etmək üçün sadəcə müvafiq arqumentin ölçüsünü göstərməyin:
etibarsız ArrayFunction (int aNumbers );
Çoxölçülü massivlər də oxşar şəkildə ötürülə bilər (yalnız ilk "ölçü" dəyişən ola bilər):
etibarsız ArrayFunction (int aNumbers [3] [2]);
Bu funksiyalar ilk addımda olduğu kimi eyni şəkildə çağırılır.
Bir funksiyada dəyişkən uzunluqlu massivləri düzgün şəkildə işləyə bilmək üçün elementlərinin sayını əlavə bir parametrdən açıq şəkildə keçirtməlisiniz və ya elementlərin öz dəyərlərinə məhdudiyyət qoyan konvensiyalardan istifadə etməlisiniz (müəyyən bir dəyər) massivin sonuna işarə olmalıdır).
Addım 3
Dizini göstərici ilə keçir. Funksiya arqumenti massivin elementlərinə uyğun bir növü olan bir dəyərə işarə olmalıdır. Misal üçün:
boş ArrayFunction (int * pNumbers);
Bir funksiyadakı məlumatlara giriş həm sıra elementləri ilə işləmək üçün qeyddə, həm də ünvan hesabından istifadə edilə bilər:
boş ArrayFunction (int * pNumbers)
{
pNumber [0] = 10; // element 0-a giriş
* (pNumber + 1) = 20; // maddə 1-ə giriş
}
Ehtiyatlı ol! Funksiya verilənlərin bir nüsxəsi deyil, ona bir göstərici ötürüldüyü üçün orijinal massiv dəyişdiriləcəkdir.
Bu metodun üstünlüyü sürət, hesablama mənbələrinin qənaəti və müəyyən bir rahatlıqdır. Beləliklə, hədəf funksiyasını massivin ixtiyari elementinə bir göstərici ötürərək zəng edə bilərsiniz:
boşluq Bəzi İşlev ()
{
int aNumbers = {1, 2, 3};
ArrayFunction (aNumbers); // bütün massiv
ArrayFunction (& aNumbers [1]); // ikinci elementdən başlayaraq
}
Bu metod, ümumiyyətlə, mövcud parametrlərin sayının əlavə bir parametrdə ötürülməsini və ya bir sıra sonlandırıcısını istifadə etməyi də əhatə edir.
Addım 4
Bir obyekt olan bir parametr olan bir funksiyaya məlumat verin və ya sıra funksiyasını həyata keçirən sinif obyektinə bir istinad. Bu cür siniflərə və ya sinif şablonlarına ümumiyyətlə populyar kitabxanalarda və çərçivələrdə rast gəlinir (Qt-də QVector, MFC-də CArray, STL-də std:: vector və s.).
Çox vaxt bu siniflər istinad məlumatları ilə gizli məlumat paylaşma strategiyasını həyata keçirir, yalnız məlumat dəyişdirildikdə dərin bir nüsxəni həyata keçirir (yazıya kopyalayın). Bu, sıra obyektlərinin funksiya və metodların arqumentləri ilə dəyərinə görə ötürülməsi halında belə hesablama mənbələrinin istehlakını minimuma endirməyə imkan verir:
boş ArrayFunction (QVector oArray)
{
int nItemCount = oArray.count ();
int nItem = oArray [0];
}
boşluq Bəzi İşlev ()
{
QVector oArray (10);
üçün (int i = 0; i