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!
gabriel.szado@gmail.com
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");
}
a tu masz opis metod z drobnymi przykładami http://www.cppreference.com/cppvector/
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?
Nie no jeszcze bedzie poprawial :p To bylo pisane dosc dawno temu, zreszta raczej sie nie staralem ;p
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 :/
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 ?
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
);
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();
:)
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.