C++ arduino的自有向量类(c+;+;)

C++ arduino的自有向量类(c+;+;),c++,vector,arduino,C++,Vector,Arduino,我还添加了void Clear()-方法 我在问关于向量类的问题 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 如何将“插入”-方法添加到这个向量类(ARDUINO使用C++但没有标准的向量方法)?< /P> 是否可以向该向量类逐个添加

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

我在问关于向量类的问题

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

如何将“插入”-方法添加到这个向量类(ARDUINO使用C++但没有标准的向量方法)?< /P> 是否可以向该向量类逐个添加值?怎么做呢


我还想问另外一个问题


如何调用此向量的delete/call destructor“sensors”,以便删除所有指针?还是传感器向量被删除?我要清除数据,然后向其中添加数据。

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

void insert\u at(尺寸、数据常数和数据){
断言(idxidx;--i){
d_数据[i]=std::move(d_数据[i-1]);
}
d_data[idx]=数据;
++d_大小;
}

正如Nacho所指出的,如果你要做很多这样的插入操作,尤其是当你存储的数据很大和/或有一个复杂的移动操作符时,使用链表可能会更好。

插入到
向量
不是一个好主意,也没有效率。如果要进行插入,应使用
列表。除此之外,你的问题还不清楚(至少对我来说),你已经有了
push_back
方法来逐个添加元素了吗?@Nacho
push_back
(如果实现正确)仍然是
O(1)
分期付款。请不要链接到你问题的部分,直接包括文本/代码/图像。这样做的目的不仅仅是为了回答你的问题,而且是为了以后遇到同样问题的任何人。是的。我的错。但有人知道这个问题的答案吗?它有向量删除方法,但如何使用它?我还没有用过这么多的C++。或者如何修复删除运算符?这里不使用移动构造函数(并且应该)编辑它,虽然我不知道ARDIONI+C++ LID是否有STD::移动它。仍然很糟糕。您正在调用resize()-这意味着,默认情况下,您将构造元素,只会移动到元素中。好吧,这就是原始代码所做的(它使用malloc/memcpy),不确定我是否要重写整个内容…我认为原始代码中有更多错误,比如resize使用d_数据到memcpy,即使它是null ptr,所以如果你在空向量上插入_,你会得到崩溃。即使在第一次呼叫时推回也会失败。
Vector<Sensor*> sensors;
push.back(new Sensor (1,1,"Sensor_1",2));
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;
}