Struktúra, Class Mátrix Tömbök, vektorok, listák

Python vs C++

A lényeg az algoritmus... A két nyelv összevetése.

Tömb, Vector (C++) és Lista (Python)

Adatszerkezetek - Python vs C++

A programozási feladatok egyik legfontosabb eleme az, hogy helyesen válasszuk meg a megoldáshoz szükséges adatszerkezeteket. Egy jó adatkezelés könnyű megoldáshoz vezethet. Ebben a fejezetben csak az összetett adatszerkezeteket elemezzük, nem tudományos igénnyel, csak praktikusan.
A klasszikus tömb a C/C++ nyelvben (és más rokon nyelvekben is) egy jól használható adatszerkezet. Korábban ezt a típust preferáltuk, de mostanában inkább a vector típust használjuk, mivel számos "szolgáltatás" tartozik hozzá.
Akár tömbről, akár vectorról beszélünk, illetve a Pythonban a list típusról, az indexelés művelete jelenti itt a "kulcsot" az adat kezelésében. Indexek segítségével érhetjük el az egyedi elemeket, járhatjuk be a teljes adatszerkezetet.

Koncentráljunk a két nyelv hasonlóságaira adatkezelés szempontjából, próbáljuk nyelvfüggetlenül értelmezni a konkrétumokat...


C++

Python

C++ kódrészlet...:

// klasszikus tömb
int t[100];
char k[50];

// inicializálás: 10 elemű tömb, kezdőérték 0 minden elemnek
int t[10]={0};
for(auto elem:t)
{
    cout << elem << endl;
}
cout << "Elemek száma: ";
cout << sizeof(t)/sizeof(int) << endl;

// vector
#include <vector>
...
vector<int> v;
vector<string> s;
vector<float> f;
...
// új elem a vector végére
v.push_back(10);

/* vector inicializálása: elemszám (n) és kezdőérték (k) minden elemre */
vector<int> v(n, k);

Példák tömb használatára (C++):

Python kódrészlet...:

lista=[] # üres lista
lista=dict() # üres lista így...

# egy listának bármi lehet az eleme

li1=[13,'szöveg','K',['A',11,'példa'],5.3,True]

# lista inicializálása (☂ Lista anomália!)
li2=[0]*n

# új elem hozzáadása a listához

lista.append(10)
lista.append('ablak')
# lista elemei [10,'ablak']

Példák lista használatára (Python):

Rendezés - tömb, vector

C++ kódrészlet...:

#include <iostream>    // cin, cout
#include <algorithm>    // sort
#include <ctime>    // time
#include <vector>    // vector

#define N 100

using namespace std;

int main()
{
  setlocale(LC_ALL,"");

  int t[N];
  int x;
  vector<int> v;
  v.reserve(N);
  srand(time(NULL));
  for(int i=0;i<N;i++)
  {
    x=rand()%100+1;
    t[i]=x;
    v.push_back(x);
  }
  // rendezés növekvő sorrendbe
  sort(&t[0],&t[100]);
  sort(v.begin(),v.end());
  cout << "Rendezett tömb:" << endl;
  for(auto szam:t)
  {
    cout << szam << " ";
  }
  cout << endl;
  cout << "Rendezett vector:" << endl;
  for(auto szam:v)
  {
    cout << szam << " ";
  }
  cout << endl;
  // rendezés csökkenõ sorrendbe C++-os "lambda" kifejezéssel
  sort(&t[0],&t[100],[](int a, int b) {return a > b;});
  //sort(v.begin(),v.end(),[](int a, int b) {return a > b;});
  sort(v.rbegin(),v.rend());
  cout << "Rendezett tömb:" << endl;
  for(auto szam:t)
  {
    cout << szam << " ";
  }
  cout << endl;
  cout << "Rendezett vector:" << endl;
  for(auto szam:v)
  {
    cout << szam << " ";
  }
  cout << endl;
  return 0;
}

Rendezés - lista

Python kódrészlet...:

from random import randint as rand

li1=[13,'szöveg','K',['A',11,'példa'],5.3,True]
# "vegyes" típusú listák nem rendezhetők...
# print(sorted(li1))
# hibaüzenet lényege:
# '<' not supported between instances of 'str' and 'int'

li2=list() # üres lista
for i in range(7):
    li2.append(rand(-5,5))
# Például --> li2=[4,2,5,1,-2,-4,3]
# magának a listának a rendezése
li2.sort()
print(li2) # li2: [-4, -2, 1, 2, 3, 4, 5]
li2.sort(reverse=True)
print(li2) # li2: [5, 4, 3, 2, 1, -2, -4]
# ----------------------------------------------------
# új rendezett lista
rend=sorted(li2)
print(rend) # rend: [-4, -2, 1, 2, 3, 4, 5]
rend=sorted(li2,reverse=True)
print(rend) # rend: [5, 4, 3, 2, 1, -2, -4]