[C++] Tablica wektorów


(Arst18) #1

Witam,

Mam za zadanie napisać program, który będzie sortował za pomocą algorytmów sortowania InsertionSort i MergeSort tablicę wektorów, gdzie kluczem sortowania będzie norma wektora. Nie mogę skorzystać z gotowej klasy , więc napisałem własną:

vector.h

#include 

#include 


using namespace std;


class Vector

{

	int* arr;

	int	Size;


public:

	Vector();

	Vector(int);

	Vector(const Vector&);

	~Vector();


	void create(int);

	int	size() const;

	double Norm() const;


	int& operator[](int);


	Vector& operator=(const Vector&);


	friend double operator*(const Vector&, const Vector&);


	friend ostream& operator<<(ostream&, const Vector&);

	friend istream&	operator>>(istream&, Vector&);


	friend bool operator<(const Vector&, const Vector&);

	friend bool operator>(const Vector&, const Vector&);

};

vector.cpp

#include "vector.h"


Vector::Vector() { int size = 0; arr = NULL; create(size); }


Vector::Vector( int size = 0 ) { arr = NULL; create(size); }


Vector::Vector(const Vector& v) { arr = NULL; operator=(v); }


Vector::~Vector() { delete [] arr; }


void Vector::create(int size)

{

	delete [] arr;

	arr = NULL;

	Size = 0;


	arr = new int[size];


	Size = size;


	for(int i=0; i
}


int	Vector::size() const { return Size; }


double Vector::Norm() const { return sqrt(*this * *this); }


int& Vector::operator [] (int i) { return arr[i]; }


Vector& Vector::operator=(const Vector& v)

{

	if( this != &v ) 

	{

		create( v.Size );

		for( int i=0; i
	}


	return *this;

}


double operator*(const Vector& a, const Vector& b)

{

	double s = 0;


	for( int i=0; i
	return s;

}


ostream& operator<<(ostream& out, const Vector& v)

{

	out << "[ ";

	for( int i=0; i
	out << "]" << endl;


	return out;

}


istream& operator>>(istream& inp, Vector& v)

{

	int size;

	inp >> size;

	v.create(size);


	for( int i=0; i> v.arr[i];

	return inp;

}


bool operator<(const Vector& a, const Vector& b) { return a.Norm() < b.Norm(); }


bool operator>(const Vector& a, const Vector& b) { return b
[/code]

Tutaj wszystko działa prawidłowo.

Teraz w programie głównym mam wczytać dwa parametry: N - liczba wektorów w tablicy, k - długość każdego wektora z tej tablicy.

Chcę stworzyć dynamiczną tablicę wektorów poleceniem Vector* vec_arr = new Vector[N], jednak potem nie jestem w stanie odwołać się do konkretnej współrzędnej konkretnego wektora. Tzn chcę, żeby vec_arr[i] wskazywało na i-ty wektor w tablicy, a naturalnie, by vec_arr[i][j] pokazywało mi j-tą współrzędną i-tego wektora. Niestety tak się nie dzieje i otrzymuję błąd. Co robić w tej sytucaji, by jednak odwoływać się do współrzędnych każdego wektora? Chodzi mi o rozwiązanie bez tablicy dwuwymiarowej i oparte na tej powyższej klasie.

Z góry wielkie dzięki, bo już nie mam pomysłów jak się za to zabrać...

Pozdrawiam,

A.


(Sawyer47) #2

A jaki? zanim-cokolwiek-napiszesz-przeczytaj-ten-temat-t152275.html