klasa <vector>

0

witam!
mam pytanie do wszystkich którzy programują w C++.
czy jest kotś z was w posiadaniu (lub moze napisać, tak dla sportu :) ) prosty programik na konsolę wykorzystujący klasę <vector>?????
będę bardzo wdzięczny za jakąkolwiek pomoc!
[email protected]

0

np. taki lamerski :p kiedys pisalem na zajecia :) :

#include <iostream>
#include <vector>
using namespace std;

int main (void)
{
    int x, y;
    vector<int> wynik;
    system ("cls");
    cout << "Podaj liczbe ktora chcesz sprowadzic do wybranego systemu pozycyjnego\n";
    cin >> x;
    cout << "Do jakiego systemu pozycyjnego chcesz sprowadzic podana przez siebie liczbe ?\n(np. 2,8,16)\n";
    cin >> y;
    do
    {
        wynik.push_back(x%y);
        x=x/y;
    } while(x/y);
    wynik.push_back(x%y);
    for (int i=wynik.size()-1; i>=0; i--) 
    {
        switch (wynik[i]) 
        {
                 case 10:
                     cout << "A";
                     break;
                     case 11:
                     cout << "B";
                     break;
                     case 12:
                     cout << "C";
                     break;
                     case 13:
                     cout << "D";
                     break;
                     case 14:
                     cout << "E";
                     break;
                     case 15:
                     cout << "F";
                     break;
                     default :
                     cout << wynik[i];  
        }
    }
    cout << endl;        
    system ("pause");    
}    
0

a tu masz opis metod z drobnymi przykładami http://www.cppreference.com/cppvector/

0
tS napisał(a)
// ... ciach
    for (int i=wynik.size()-1; i>=0; i--) 
    {
        if (wynik[i]==10 || wynik[i]==11 || wynik[i]==12 || wynik[i]==13 || wynik[i]==14 || wynik[i]==15) 
        {
             switch (wynik[i]) 
             {
                 case 10:
// ciach...

Fuuu, jaki brzydki kod ;) Poczytaj troche o STL
I poco ten if jak masz switch?

0

Nie no jeszcze bedzie poprawial :p To bylo pisane dosc dawno temu, zreszta raczej sie nie staralem ;p

0
tS napisał(a)

Nie no jeszcze bedzie poprawial :p To bylo pisane dosc dawno temu, zreszta raczej sie nie staralem ;p
Jeśli już coś pisać to dobrze - od niechcenia to można bąki zbijać. Potem się przyzwyczaisz, komuś kod pokażesz i wychodzi lipa - po latach tacy ludzie tworzą firmy i powstają programy typu gadu-gadu :/

0

To byl pierwszy program jaki pisalem z wykorzystaniem klasy vector :)
Napisany brzydko - fakt, ale sluzyl jako cwiczenie, autorowi tematu chodzilo o cokolwiek, wiec dalem cokolwiek. Nie usprawiedliwiam sie, gdyz wiem ze programista ze mnie poczatkujacy, chcialem tylko pomoc czlowiekowi :)

Btw. valem sie zamieszczac kodu na tym forum i mialem racje ;)
Btw 2. Ja gad-gadu traktuje tylko jako protokol, gdyz z tego zacofanego klienta nie korzystam na Windows :) Polecam PSI (dziala swietnie na wszystkich systemach) :p (tylko niestety tam jest transport :(, ale na chrome.pl ostatnio rzadko pada)

Edit: Wyrzucilem ten warunek, mam nadzieje, ze teraz lepiej :)

Ale skoro juz mowa o vectorze to mam pytanie:

Gdy zapetle sobie program (np. chce jeszcze raz wykonac operacje DecToCos_tam) to tak jakby nie czyscilo mi pamieci i zamiast podawac liczbe w danym systemie pozycyjnym, to wyswietla mi glupoty, czy ktos wie jak wyczyscic vector ?

0
tS napisał(a)

Btw. balem sie zamieszczac kodu na tym forum i mialem racje ;)

Nie ma sie co bac.
Jak cos bedzie nie tak, zawsze cie ktos poprawi. Mozna sie nauczyc czegos nowego :)

tS napisał(a)

Gdy zapetle sobie program (np. chce jeszcze raz wykonac operacje DecToCos_tam) to tak jakby nie czyscilo mi pamieci i zamiast podawac liczbe w danym systemie pozycyjnym, to wyswietla mi glupoty, czy ktos wie jak wyczyscic vector ?

Usuwanie elementow - funkcja erase.

iterator erase(
   iterator _Where
);
iterator erase(
   iterator _First,
   iterator _Last
);
0

Jak chcesz wyczyścić wektor, użyj tzw. swap trick:

std::vector< int >().swap(wektor);

Swap powoduje wymianę zawartości pomiędzy vector'ami. W powyższym przykładzie tworzymy pusty vector tymczasowy. Dzięki użyciu swap(), wektor dostanie zawartość vectora pustego, czyli nic ;), a vector tymczasowy starą zawartość wektor'a. vector tymczasowy następnie zostanie skasowany, a razem z nim stara zawartość wektor'a.

Ale można też po prostu:
wektor.clear();

:)

0
TeMPOraL napisał(a)

Jak chcesz wyczyścić wektor, użyj tzw. swap trick:

std::vector< int >().swap(wektor);

Swap powoduje wymianę zawartości pomiędzy vector'ami. W powyższym przykładzie tworzymy pusty vector tymczasowy. Dzięki użyciu swap(), wektor dostanie zawartość vectora pustego, czyli nic ;), a vector tymczasowy starą zawartość wektor'a. vector tymczasowy następnie zostanie skasowany, a razem z nim stara zawartość wektor'a.

To nie jest takie proste... swap() z domyślnie utworzonym obiektem powoduje trimming wektora (zmiana capacity()), co nie musi być wcale porządane, powoduje dealokację zajętej pamięci (tej z capacity()). Nawet może powodować alokację nowej pamięci na domyślny "pusty" wektor. Taki jest koszt. Zyskiem jest zwolnienie pamięci zajmowanej wcześniej przez (potencjalnie duży) wektor.

TeMPOraL napisał(a)

Ale można też po prostu:
wektor.clear();

Wystarczy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1