wypełnienie vectora float i wyświetlenie problem

0

Jest to kolejne zadanie z Thinking in C++. Trzeba utworzyć wektor vector<float>, umieścić w nim 25 liczb float z pomocą for i wyświetlić. Poniżej to, co napisałem. Próbowałem rozwiązać sprawę użyciem iteratorów i wskaźników, ale coś robię źle.

 
#include <iostream>
#include <vector>
#include <conio.h>
using namespace std;
int main()
{
    vector <float> v;
    float n;
    n=(1/2);
    short j=0;
    vector<float>::iterator i;
    for(int i=0; i>=25; i++)
    {
        v[i]=n;
        n+=(1/10);
    }
    for(i=v.begin()-1; i!=v.end()-1; i++)
    {
        cout << "[" << j << "]: " << *i << endl;
        j++;
    }
    getch();
    return 0;
}

Program się kompiluje, ale po uruchomieniu nic się nie wyświetla.

Szukałem na google pomocy, ale nadal nie mogę sobie poradzić.

0

Bo wektor jest pusty i nie możesz sobie na pustym wektorze zrobić v[i]=n;. Iterator jest tu zbędny, wystarczy dostęp za pomocą operatora []. Dodaje się np. tak (na koniec):

v.push_back(n);

Ponadto tutaj n=(1/2); zdaje się chciałeś zrobić 0,5, ale jak chcesz otrzymać te 0,5 musisz zrobić z tego prawdziwego floata, czyli: 1/2.0 lub 1.0/2. To samo tutaj: n+=(1/10);, tak to otrzymasz po prostu zaokrąglenie do 0.

0
xeo545x39 napisał(a)
v.push_back(n);

I wszystko jasne. Nie wiem jak mogłem to przeoczyć, chwilę wcześniej robiłem inne zadanie i to wykorzystywałem. Dzięki.

 
#include <iostream>
#include <vector>
#include <conio.h>
using namespace std;
int main()
{
    vector <float> v;
    float n;
    n=(1/2.0);
    short j=0;
    for(int i=0; i!=26; i++)
    {
        v.push_back(n);
        n+=(1/10.0);
    }
    for(vector<float>::iterator i=v.begin()-1; i!=v.end()-1; i++)
    {
        cout << "[" << j << "]: " << *i << endl;
        j++;
    }
    getch();
    return 0;
}

Mam jeszcze pytanie. Jest linijka:

for(int i=0; i!=25; i++)

i działa. Dlaczego nie działa (tzn. nic się nie wyświetla) for(int i=0; i>=25; i++)

 ?
0

Dodając do postu powyżej:

  • Masz zły warunek stopu pierwszej pętli. Efekt jest taki, że nie dodaje w ogóle nic do kolekcji, bo i jest inicjowane zerem, a warunek wyjścia od razu spełniony (powinno być i<25).
  • Żle masz zainicjowany iterator. Nie odejmuj 1.
  • Źle masz warunek stopu drugiej pętli. Powinno być bez -1.
0
Yob napisał(a)

Dodając do postu powyżej:

  • Masz zły warunek stopu pierwszej pętli. Efekt jest taki, że nie dodaje w ogóle nic do kolekcji, bo i jest inicjowane zerem, a warunek wyjścia od razu spełniony (powinno być i<25).
 
#include <iostream>
#include <vector>
#include <conio.h>
using namespace std;
int main()
{
    vector <float> v;
    float n;
    n=(1/2.0);
    short j=0;
    for(unsigned int i=0; i<25; i++)
    {
        v.push_back(n);
        n+=(1/10.0);
    }
    for(vector<float>::iterator i=v.begin(); i!=v.end(); i++)
    {
        cout << "[" << j << "]: " << *i << endl;
        j++;
    }
    getch();
    return 0;
}

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