21

Re: Вектор об'єктів

FakiNyan написав:

ну то берете першу букву та й порівнюєте з першою буквою інших елементів

Може не прокатить, бо є кольори що починаються однаковими буквами(Blue-Black,Green-Grey)

22

Re: Вектор об'єктів

Може не прокатить, бо є кольори що починаються на одинакові букви(Blue-Black,Green - Grey)

23

Re: Вектор об'єктів

якщо перші букви однакові - перевіряйте наступні

24 Востаннє редагувалося Mirek7098 (14.02.2018 23:38:13)

Re: Вектор об'єктів

const int n = 5;
vector<Car*> list(n);
vector<Car>::iterator it;

  .............................
...................................
.....якийсь код...................

   

for(it = list.begin(); it != list.end(); ++it)
    {       
    }

У цьому випадку компілятор там де знак "=" і знак "!=" матюкається. Допоможіть виправити

25 Востаннє редагувалося koala (14.02.2018 23:41:14)

Re: Вектор об'єктів

Для початку - розберіться, як взагалі сортувати різні елементи (підказка: про ітератори вам дали погану пораду).
Потім - як саме порівнювати різні об'єкти, зокрема, рядки. І тільки потім починайте сортувати.

І ніколи не кажіть "компілятор матюкається", якщо, звісно, цей компілятор не зроблений 30 років тому і розміром з тодішні дискети. Всі компілятори, розроблені пізніше, не матюкаються, а повідомляють про помилку, і часто досить детально, щоб її виправити. Якщо не розумієте - копіюйте повідомлення компілятора сюди і викладайте свої думки з цього приводу.

Подякували: Mirek70981

26

Re: Вектор об'єктів

А, я поняв, вже не треба (vector<Car*>::iterator it)

27

Re: Вектор об'єктів

а шо компілятор пише?

28

Re: Вектор об'єктів

Не матюкається вже

Подякували: sensei1

29

Re: Вектор об'єктів

#include <iostream>
#include <conio.h>
#include <vector>
#include <iterator>
#include <string>
using namespace std;
class Car
{
private:
    int year;
    string color;
    string brand;
    string typefuel;
public:
    Car(int year,string color,string brand,string typefuel)
    {
        this->brand = brand;
        this->color = color;
        this->typefuel = typefuel;
        this->year = year;
    }
    friend ostream& operator<< (ostream& stream, const Car& c);    
    ~Car(){}
};
ostream& operator<< (std::ostream& stream, const Car& c)
{
        stream << "Color " << c.color << " | Yaer " << c.year << " | Type fuel " << c.typefuel << " | Brand " << c.brand << endl;
        return stream;
}    
void main()
{
    int year;
    string color;
    string brand;
    string typefuel;
    const int n = 2;
    vector<Car*> list(n);
    for(int i = 0; i < n; i++)
    {
        cout << "Enter color: ";
        cin >> color;
        cout << "Enter year: ";
        cin >> year;
        cout << "Enter brand: ";
        cin >> brand;
        cout << "Enter type fuel: ";
        cin >> typefuel;
        Car *asd = new Car(year,color,brand,typefuel);
        list.push_back(asd);
    }
    vector<Car*>::iterator it;
    for(it = list.begin(); it != list.end(); ++it)
    {    
        cout << *it;
    }
    _getch();
}

Чому після перегрузки оператора, мені виводить сміття?

30

Re: Вектор об'єктів

До перевантаження оператора ця програма не могла виводити сміття, бо не знала, як зробити cout << *it; (не важливо, зі сміттям чи ні).
Чому дорівнює *list.begin(), як гадаєте?

31

Re: Вектор об'єктів

Це вказівник на нульовий елемент вектора

32

Re: Вектор об'єктів

Mirek7098 написав:

Це вказівник на нульовий елемент вектора

Не зовсім так, хоча може ви й маєте на увазі те, що треба, не будемо уточнювати, я не питав "що це", я питав, "чому він дорівнює".

Ну і схоже я все ж дав вам погану пораду - так, вказівниками сортувати швидше, але вас поки що це буде плутати. Загальне правило: читаність коду зазвичай важливіша за оптимальність, бо якщо ви можете розібрати, як він працює, то можете і оптимізувати, але якщо ви не можете розібрати, то нічого з ним вже не зробите. Якщо вказівники вас збивають з пантелику, ставте там просто об'єкти.

33 Востаннє редагувалося Mirek7098 (15.02.2018 12:20:37)

Re: Вектор об'єктів

#include <iostream>
#include <conio.h>
#include <vector>
#include <iterator>
#include <string>
using namespace std;
class Car
{
private:
    int year;
    string color;
    string brand;
    string typefuel;
public:
    Car()
    {}
    Car(int year,string color,string brand,string typefuel)
    {
        this->brand = brand;
        this->color = color;
        this->typefuel = typefuel;
        this->year = year;
    }
    int Year()
    {
        return year;
    }
    string Color()
    {
        return color;
    }
    string Typefuel()
    {
        return typefuel;
    }
    string Brand()
    {
        return brand;
    }
    friend ostream& operator<< (ostream& stream, const Car& c);    
    bool operator==(const Car& c) const;
    ~Car(){}
};
ostream& operator<< (ostream& stream, const Car& c)
{
        stream << "Color " << c.color << " | Year " << c.year << " | Type fuel " << c.typefuel << " | Brand " << c.brand << endl;
        return stream;
}
bool Car::operator==(const Car & c) const
{
        if (this->Color==c.Color)
        return true;
}
void main()
{
    int year;
    string color;
    string brand;
    string typefuel;
    const int n = 3;
    vector<Car> list(n);
    for(int i = 0; i < n; i++)
    {
        cout << "Enter color: ";
        cin >> color;
        cout << "Enter year: ";
        cin >> year;
        cout << "Enter brand: ";
        cin >> brand;
        cout << "Enter type fuel: ";
        cin >> typefuel;
        Car asd(year,color,brand,typefuel);
        list.push_back(asd);
    }
    vector<Car>::iterator  it;
    for(it = list.begin(); it !=  list.end(); ++it)
    {    
        cout << *it;
    }
    cout << "...:::Sort by color:::....\n";

    for(it = list.begin(); it !=  list.end(); ++it)
    {    
        cout << *it->Color;
       for(vector<Car>::iterator at = list.begin; at != list.end();at++)
       {
           if(*it->Color == *at->Color)
           {
               сout << *at->Color;
           }
       }
    }
    _getch();
}

Я не розумію, чому воно не працює.Тут напевно проблема з перегрузкою, і з конструктором по замовчуванню.
Допоможіть будь-ласка виправити.

34

Re: Вектор об'єктів

Компілятор пише: error C2276: '*' : illegal operation on bound member function expression

35

Re: Вектор об'єктів

Ну так прочитайте: '*' - некоректна операція на функції-члені. Ви не написали, в якому рядку це стається, але якщо припустити, що *it->Color - то чого ви очікуєте від операції '*', застосованої до функції Color, що є членом об'єкту, на який вказує it?

36

Re: Вектор об'єктів

То як мені його виправити? Я прибирав "*", тоді мені пише: error C3867: 'Car::Color': function call missing argument list; use '&Car::Color' to create a pointer to member

37 Востаннє редагувалося /KIT\ (08.07.2021 13:42:26)

Re: Вектор об'єктів



38

Re: Вектор об'єктів

Ви взагалі знаєте, як із функціями працювати?

39

Re: Вектор об'єктів

З звичайними функціями - так, а з методами класу - не дуже

40

Re: Вектор об'єктів

Ну то уявіть собі, що it->Color - це звичайна функція. Чого не вистачає?