Как использовать векторные и структурные члены в методе

Я новичок в C++ (а не старый в программировании...), и у меня есть проблемы с обработкой векторов и структур в классе. в основном у меня есть вектор и массив указателей для структурирования членов в классе, и я хочу поработать в моих методах, но я делаю что-то

вот мое движение

#pragma once
using namespace std;
class movement
{
private:
    static const int MAX_ROW_PER_TRACKER = 100;
    static const int MIN_TO_START_CALC = 30;
    static const int MAX_TRACKERS = 20;

    struct tracker
    {
        int id;
        double a[MAX_ROW_PER_TRACKER];
        double b[MAX_ROW_PER_TRACKER];
        double c;
    };
    vector<int> trackersOrder[MAX_TRACKERS] = {};
    tracker* trackersArr[MAX_TRACKERS];

public:
    movement();
    void addRow(int a, int b, int c);
    ~movement();
};

и мое движение

#include "stdafx.h"
#include "movement.h"
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

movement::movement()
{
}

void movement::addRow(int id, int a, int b)
{
    int index;
    vector<int>::iterator searchID = find(trackersOrder.begin(), trackersOrder.end(), ID);
    if (searchID == trackersOrder.end())
    {
        vector<int>::iterator freeLocation = find(trackersOrder.begin(), trackersOrder.end(), 0); 
        index = freeLocation - trackersOrder.begin();
        trackersOrder.insert(trackersOrder.begin + index, id);
        structArr[index] = new tracker;
        structArr[index]->id = id;
        structArr[index]->a[0] = a;
        structArr[index]->b[0] = b;
        structArr[index]->c = 0;
    }

}

movement::~movement()
{
}

поэтому, когда я отправляю в метод "addRow" идентификатор, и bi хочу сначала проверить, есть ли у меня уже этот идентификатор в моем векторе (вектор просто дает мне индекс для массива structs), и если нет, то если поставить идентификатор в первый пустое место в векторе и на массиве структур / но по некоторым причинам мне кажется, что метид не преобразовал вектор и структуры. Вы можете помочь мне понять, почему? PS - могу поспорить, что в моем коде больше ошибок, это мои первые попытки с указателями и т. д. (Я иду из хорошей жизни в Matlab), поэтому я буду рад узнать о них также большое спасибо!

1 ответ

Главная проблема

Проблема в том, что в вашем коде trackersOrder это не вектор, а массив векторов:

vector<int> trackersOrder[MAX_TRACKERS] = {};  // array of MAXTRACKERS vectors !!

Решение

Если вы определите его как простой вектор, он должен работать лучше:

vector<int> trackersOrder;

Если вы хотите установить его размер, сделайте это в конструкторе движения:

movement::movement() : trackersOrder(MAX_TRACKERS)
{
}

Другие вопросы

Существует случай опечатка с ID которые должны быть id,

auto searchID = find(trackersOrder.begin(), trackersOrder.end(), id);  // by the way auto is easier + ID corrected

Есть пропавшие () после begin К сожалению, арифметика вашего итератора преобразуется в арифметику с указателем на функцию (sic!!):

    trackersOrder.insert(trackersOrder.begin() + index, id); // corrected

Наконец, есть пара structArr, которые должны быть заменены trackersArr.

Результат, наконец, компилируется ( онлайн-демонстрация)

Другие вопросы по тегам