- Massiv yaratmaq, elementlərə indekslə müraciət etmək və onu dövrlə gəzmək
std::vectorilə element əlavə etmək, silmək və ölçünü tapmaqstd::stringilə mətni birləşdirmək, ölçmək, kəsmək və axtarmaq- Hüdudlardan kənara çıxmaq səhvinin qarşısını almaq
Sinifdə 25 şagird var və hər birinin qiymətini saxlamaq lazımdır. 25 ayrı dəyişən — score1, score2, ... — yaratmaq yorucudur, şagirdlərin sayı əvvəlcədən məlum deyilsə isə, ümumiyyətlə mümkün deyil. Bunun üçün massivlər və vektorlar var: bir adda çoxlu qiymət. Mətnlə işləmək üçün isə sətirlər (std::string) var.
Massivlər
Massiv eyni tipli elementlərin yaddaşda ardıcıl düzülmüş, sabit ölçülü toplusudur. Elementlərə indekslə müraciət olunur və nömrələmə 0-dan başlayır: 5 elementli massivin indeksləri 0-dan 4-ə qədərdir. Massivin ölçüsü kompilyasiya zamanı müəyyən olunur və sonra dəyişmir.
#include <iostream>
int main() {
int temps[5] = {12, 15, 9, 18, 14};
int sum = 0;
for (int i = 0; i < 5; i++) {
sum += temps[i];
}
std::cout << "First: " << temps[0] << '\n';
std::cout << "Last: " << temps[4] << '\n';
std::cout << "Sum: " << sum << '\n';
return 0;
}First: 12 Last: 14 Sum: 68
std::vector: böyüyə bilən massiv
Real proqramlarda elementlərin sayı çox vaxt əvvəlcədən məlum olmur. std::vector (<vector> faylından) lazım olduqca böyüyən massivdir: push_back sona element əlavə edir, pop_back sonuncunu silir, size() isə elementlərin sayını qaytarır. Bucaq mötərizələrindəki tip (std::vector<int>) vektorda nə saxlanacağını göstərir.
#include <iostream>
#include <vector>
int main() {
std::vector<int> scores = {85, 92, 78};
scores.push_back(95);
scores.push_back(60);
std::cout << "Count: " << scores.size() << '\n';
std::cout << "Second: " << scores[1] << '\n';
int best = scores[0];
for (int s : scores) {
if (s > best) {
best = s;
}
}
std::cout << "Best: " << best << '\n';
scores.pop_back();
std::cout << "After pop_back: " << scores.size() << '\n';
return 0;
}Count: 5 Second: 92 Best: 95 After pop_back: 4
for (int s : scores) yazılışı aralıq üzrə for dövrüdür: o, vektorun hər elementini növbə ilə s dəyişəninə yazır. İndekslərlə işləmək lazım deyilsə, bu, ən sadə və təhlükəsiz yoldur.
| Metod | Nə edir |
|---|---|
v.push_back(x) | x-i sona əlavə edir |
v.pop_back() | sonuncu elementi silir |
v.size() | elementlərin sayı |
v[i] | i indeksli element (yoxlamasız) |
v.at(i) | i indeksli element (hüdud yoxlanışı ilə) |
v.front(), v.back() | birinci və sonuncu element |
v.empty() | vektor boşdursa true |
v.clear() | bütün elementləri silir |
std::vector-un ən çox işlədilən metodlarıVektorda istənilən tipi, məsələn, sətirləri saxlamaq olar. İndeks lazımdırsa, adi for dövrü də işləyir. size() işarəsiz tip qaytardığı üçün sayğac kimi std::size_t götürmək məqsədəuyğundur:
#include <iostream>
#include <string>
#include <vector>
int main() {
std::vector<std::string> names = {"Aysel", "Murad"};
names.push_back("Leyla");
for (std::size_t i = 0; i < names.size(); i++) {
std::cout << i + 1 << ". " << names[i] << '\n';
}
std::cout << "First: " << names.front() << ", last: " << names.back() << '\n';
return 0;
}1. Aysel 2. Murad 3. Leyla First: Aysel, last: Leyla
std::string ilə mətn
std::string mətn saxlayır və onunla işləmək üçün çoxlu hazır metodlara malikdir. Sətirləri + ilə birləşdirmək, length() ilə uzunluğunu tapmaq, [i] ilə ayrıca simvolu götürmək, substr(başlanğıc, uzunluq) ilə hissəsini kəsmək və find ilə axtarmaq olar.
#include <iostream>
#include <string>
int main() {
std::string city = "Baku";
std::string greeting = "Hello, " + city + "!";
std::cout << greeting << '\n';
std::cout << "Length: " << greeting.length() << '\n';
std::cout << "First letter: " << city[0] << '\n';
std::cout << "Part: " << greeting.substr(0, 5) << '\n';
std::cout << "Found at: " << greeting.find("Baku") << '\n';
city += " city";
std::cout << city << '\n';
return 0;
}Hello, Baku! Length: 12 First letter: B Part: Hello Found at: 7 Baku city
find axtarılan mətnin başladığı indeksi qaytarır: B hərfi 7-ci mövqedədir (sayma 0-dan başlayır).Sətir də simvollar ardıcıllığıdır, ona görə onu aralıq üzrə for dövrü ilə simvol-simvol gəzmək olar. Aşağıdakı proqram «Azerbaijan» sözündə kiçik a hərfini sayır. Nəticəyə diqqət et: böyük A sayılmadı, çünki C++ üçün 'A' və 'a' fərqli simvollardır. Sətirləri == ilə müqayisə etmək də olar.
#include <iostream>
#include <string>
int main() {
std::string word = "Azerbaijan";
int count = 0;
for (char c : word) {
if (c == 'a') {
count++;
}
}
std::cout << "Letter a appears " << count << " times\n";
std::cout << std::boolalpha << (word == "Azerbaijan") << '\n';
return 0;
}Letter a appears 2 times true
Əsas fikirlər
- Massivin ölçüsü sabitdir, indekslər 0-dan «ölçü − 1»-ə qədərdir.
- Hüdudlardan kənara çıxmaq qeyri-müəyyən davranışdır;
at()indeksi yoxlayır. std::vectorböyüyə bilir:push_back,pop_back,size,front,back.for (int x : v)konteynerin hər elementini növbə ilə gəzir.std::stringbirləşdirməni (+),length,substr,findmetodlarını və==müqayisəsini dəstəkləyir.
Özünü yoxla
10 sual. Hər düzgün cavab XP qazandırır.
int a[4] = {3, 6, 9, 12}; olarsa, a[2] nəyə bərabərdir?