如何在方法中使用vector和struct成员

时间:2016-06-30 16:15:24

标签: c++ class pointers vector struct

我是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();
};

和我的movement.cpp

#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”id时,bi想先检查我的vector中是否已经有了这个id(向量只给了我structcts数组的索引),如果没有,那么如果把id放入在向量中的第一个空位和结构数组/ 但从某些方面来看,我认为,方法不会重新调整载体和结构。你能帮我理解为什么吗? p.s - 我可以打赌我的代码中有更多的错误,我的第一个尝试使用指针等。 (即时通讯来自Matlab的美好生活)所以我也很乐意学习它们 非常感谢你!

1 个答案:

答案 0 :(得分: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

() whicn将你的迭代器算法转换为函数指针算法(sic !!)之后,有一个缺失的begin

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

最后,还有一些应该由trackersArr替换的structArr。

结果最终编译(online demo