自己的arduino矢量类(c ++)

时间:2016-03-14 15:05:37

标签: c++ vector arduino

我还添加了void Clear() - 方法。

https://redstoner.com/forums/threads/840-minimal-class-to-replace-std-vector-in-c-for-arduino

https://forum.arduino.cc/index.php?topic=45626.0

我正在询问这个Vector类。

void push_back(Data const &x) {
  if (d_capacity == d_size) resize();
  d_data[d_size++] = x;
}; // Adds new value. If needed, allocates more space

如何在此Vector类中添加"插入" -method(arduino使用C ++但没有标准的矢量方法)?

Vector<Sensor*> sensors;

我有另一个班级Sensor,我使用这样的矢量。

push.back(new Sensor (1,1,"Sensor_1",2));

是否可以逐个向此向量类添加值?怎么做?

我还想问其他问题。

如何为此Vector&#34;传感器调用删除/调用析构函数&#34;所有指针都删除了吗?或传感器矢量被删除?我想清除数据,然后向其中添加数据。

1 个答案:

答案 0 :(得分:1)

如果要在向量的末尾添加项目,请使用上面引用的push_back方法。如果要在向量中的其他位置添加项目,则需要添加自己的方法,如果需要,可以重新调整大小,将插入位置上方的元素向上移动一个位置,然后将新元素复制到正确的位置。插槽。像这样(未经测试):

void insert_at(size_t idx, Data const &data) {
    assert(idx < d_size);
    if (d_capacity == d_size) {
        resize();
    }
    for (size_t i = d_size; i > idx; --i) {
        d_data[i] = std::move(d_data[i - 1]);
    }
    d_data[idx] = data;
    ++d_size;
}

正如Nacho指出的那样,如果你要进行大量的插入操作,你可能会更好地使用链表,特别是如果你要存储的数据很大和/或有一个复杂的移动算子。