Как использовать векторные и структурные члены в методе
Я новичок в 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.
Результат, наконец, компилируется ( онлайн-демонстрация)