我是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的美好生活)所以我也很乐意学习它们 非常感谢你!
答案 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)