Birden fazla değişkenin kompakt bir hale getirilmesi için kullanıdığımız yapı. Örneğin lisede öğrenmiş olduğumuz vektörler konusunu hatırlayalım. B
Lisede öğrenmiş olduğumuz vektörler konusunu hatırlayalım. Uzayda büyüklüğü ve yönü olan geometrik bir objedir. 3 boyutlu uzayda bir vektörün x, y, z olmak üzere üç adet komponenti vardır.
Şimdi biz bu üç komponenti nasıl tutabiliriz?
int x, y, z;
Peki birden fazla olmasını istiyorsam?
std::vector<int> x, y, z;
Ne kadar basit değil mi? Peki bunu bir fonksiyona atalım.
void func(vector<int> x, vector<int> y, vector<int> z) {
// bla bla bla
}
bu şekilde hayatımızı sürdürebiliriz fakat bu kendimize eziyet etmekten başka bir şey değildir. Bizler kendimizi sevdiğimiz için daha kolay ve elegant bir yol seçiyoruz:
#include <iostream>
#include <vector>
using namespace std;
struct MyVector{
int x, y, z;
}; // sonuna ; ekliyoruz
void func(vector<MyVector> vec) {
// bla bla bla
}
int main() {
vector<MyVector> vec;
}
struct~~~isim\{ \\ değişkenlerimiz~ve~fonksionyonlarımız\\ \};
Temel yapısı bu şekilde. Kullanımı çok basit:
#include <iostream>
#include <vector>
using namespace std;
struct MyVector{
int x, y, z;
};
void my_print(vector<MyVector> vec) {
for (MyVector& i : vec)
cout << i.x << "\t" << i.y << "\t" << i.z << endl;
}
int main() {
vector<MyVector> vec;
MyVector my_vec;
my_vec.x = 5; // elemanlarına erişirken . kullanıyoruz
my_vec.y = 7;
my_vec.z = 9;
MyVector my_vec2;
my_vec2.x = 65;
my_vec2.y = 57;
my_vec2.z = 39;
MyVector my_vec3;
my_vec3.x = 45;
my_vec3.y = 72;
my_vec3.z = 96;
vec.push_back(my_vec);
vec.push_back(my_vec2);
vec.push_back(my_vec3);
my_print(vec);
}
// 5 7 9
// 65 57 39
// 45 72 96
Sanki bir değişkenimizin alt değişkenleri varmış gibi düşünebiliriz.
İçerisinde fonksiyon tanımlamak da mümkün. Bu tanımlanan fonksiyonları çağırmak için . kullanıyoruz.
#include <iostream>
#include <vector>
using namespace std;
struct MyVector{
int x, y, z;
void print() {
cout << x << "\t" << y << "\t" << z << endl;
}
};
int main() {
MyVector my_vec;
my_vec.x = 5;
my_vec.y = 7;
my_vec.z = 9;
my_vec.print(); // 5 7 9
}
Bu fonksiyonlar kendi değişkenine ait değerlerle işlem yapar. Yani her koyun kendi bacağından asılır:
#include <iostream>
#include <vector>
using namespace std;
struct MyVector{
int x, y, z;
void print() {
cout << x << "\t" << y << "\t" << z << endl;
}
};
void my_print(vector<MyVector> vec) {
for (MyVector& i : vec)
i.print(); // buraya dikkat
}
int main() {
vector<MyVector> vec;
MyVector my_vec;
my_vec.x = 5;
my_vec.y = 7;
my_vec.z = 9;
MyVector my_vec2;
my_vec2.x = 65;
my_vec2.y = 57;
my_vec2.z = 39;
MyVector my_vec3;
my_vec3.x = 45;
my_vec3.y = 72;
my_vec3.z = 96;
vec.push_back(my_vec);
vec.push_back(my_vec2);
vec.push_back(my_vec3);
my_print(vec);
}
// 5 7 9
// 65 57 39
// 45 72 96
Leave a Reply