#include <iostream>
using namespace std;

struct Vector {
	float x;
	float y;
	float z;
};

void printVector(Vector v) {
	cout << "(" << v.x
		 << ", " << v.y
		 << ", " << v.z 
		 << ")";

}

void swapVectors(Vector v1, Vector v2) {
	
	/*
	 * Така наистина разменяме v1 и v2, но те
	 * са копиа на истинските вектори, подадени
	 * като аргументи на тази функция.
	 */
	Vector temp = v1;
	v1 = v2;
	v2 = temp;
}

void printVectors(Vector v1, Vector v2) {
	
	cout << "v1 = ";
	printVector(v1);
	cout << endl;

	cout << "v2 = ";
	printVector(v2);
	cout << endl;
}

void swapVectors(Vector *v1, Vector *v2) {

	/*
	 * Този път предаваме адреситена истинските
	 * вектори => наистина разменяме тях.
	 */
	Vector temp = *v1;
	*v1 = *v2;
	*v2 = temp;
}

int main() {

	Vector v1 = { 0.f, 0.f, 0.f };
	Vector v2 = { 1.f, 1.f, 1.f };
	cout << endl << "Initial vectors..." << endl;
	printVectors(v1, v2);

	swapVectors(v1, v2);
	cout << endl << "Swapping vectors..." << endl;
	printVectors(v1, v2);

	cout << endl << "Swapping using pointers..." << endl;
	swapVectors(&v1, &v2);
	printVectors(v1, v2);
}
