Mi a hiba ebben a mátrix sorait rendező C++ programban?
Azzal van a gond szerintem, hogy cím szerint próbálom átadni a vektort a rendező függvénynek. Ha viszont érték szerint adom át, csak a vektor másolatát módosítja a függvény, nem az eredetit, úgy vettem észre.
Matrix.h:
#include <vector>
#include <iostream>
using namespace std;
class Matrix
{
vector<int> adat;
int sor;
int oszlop;
public:
Matrix(int s=1, int o=1): sor(s), oszlop(o)
{
for (int i=0; i<(sor*oszlop); i++)
{
adat.push_back(0);
}
}
void set_sor(vector<int> v, int s)
{
for (int i=oszlop-1; i>=0; i--)
adat[(((s-1)*oszlop)+(oszlop-i))-1]= v[oszlop-(i+1)]; // a fuggvenynek atadott vektor elemeit ertekul adja a megadott sor elemeinek
}
friend ostream& operator<< (ostream& os, const Matrix &m)
{
for (int i=0; i<(m.sor*m.oszlop); i++)
{
cout<<m.adat[i]<<" ";
if( (i+1) != 0 && m.oszlop != 1)
{
if ((i+1)%(m.oszlop) == 0) /** sortores, ha tobb, mint 1 oszlop van es a sor vegere ert a kiiras */
cout<<endl;
}
else if (m.oszlop == 1)
cout<<endl;
}
return os;
}
void rendez_sorok (vector<int> &v, int eleje, int vege)
{
int i= eleje, j= vege, tmp_vec;
vector<int> tmp(oszlop);
int pivot= v[(eleje+ vege)/2];
vector <vector<int>> sorok;
for (int k=0; k<sor; k++)
{
vector<int> aktualisSor(oszlop);
for(int h=0; h<oszlop; h++)
{
aktualisSor[h]= adat[(k*oszlop)+h];
}
sorok.push_back(aktualisSor);
}
while (i<=j)
{
while (v[i]<pivot)
i++;
while (v[j]>pivot)
j--;
if (i<=j)
{
tmp= sorok[j];
sorok[j]= sorok[i];
sorok[i]= tmp;
tmp_vec=v[j];
v[j]= v[i];
v[i]= tmp_vec;
i++;
j--;
}
if (eleje<j)
rendez_sorok(v,eleje,j);
if (vege>i)
rendez_sorok(v,vege,i);
}
}
};
main.cpp:
#include <vector>
#include <vector>
#include <vector>
#include <vector>
#include <iostream>
#include "Matrix3.h"
using namespace std;
int main()
{
Matrix matrix2(5,6);
vector<int> v1(6,0);
vector<int> v2(6,1);
vector<int> v3(6,2);
vector<int> v4(6,3);
vector<int> v5(6,4);
vector <int> v_sorr(5,0);
v_sorr[0]= 1;
v_sorr[1]= 0;
v_sorr[2]= 2;
v_sorr[3]= 3;
v_sorr[4]= 4;
matrix2.set_sor(v1,1);
matrix2.set_sor(v2,2);
matrix2.set_sor(v3,3);
matrix2.set_sor(v4,4);
matrix2.set_sor(v5,5);
cout<<matrix2<<endl;
cout<<endl;
matrix2.rendez_sorok(&v_sorr[0],0,4);
cout<<matrix2<<endl;
cout<<endl;
system("pause");
return 0;
}
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Na most írd le azt is, hogy milyen hibát kaptál, vagy mi nem jó. (Segfault? melyik sorra?)
Egyet tippelek azért:
void rendez_sorok (vector<int> &v, int eleje, int vege) // ez azt jelenti, hogy v-t referencia szerint adod át. Vagyis kap egy v-t, és abba ő beleírhat.
matrix2.rendez_sorok(&v_sorr[0],0,4); // itt meg v[0] címét add meg neki, de ő egy vektort vár, nem pedig memóriacímet. A függvénydeklaráció alapján szerintem itt a helyes szintaktika a & elhagyása lenne, csak simán a vektort adnád neki.
itt találsz róla leírást.
Talált?
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Hihetetlen, hogy mindenki segítséget kér, hogy mi a rossz, de senki nem képes leírni a hibaüzenetet. :D
Honnan jön ez a sok életképtelen "programozó", valahol gyártják ezeket?
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!