CPP 030 – Struct

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

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *