简体   繁体   中英

Own vector class for arduino (c++)

I added also void Clear()-method.

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

I'm asking about this Vector class.

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

How to add "insert"-method to this Vector class (arduino use C++ but not have a standard vector methods)?

Vector<Sensor*> sensors;

I have a another class Sensor and I use vector like this.

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

Is it possible to add values one by one to this vector class? And how to do it?


I like to ask also other question.

How can I call delete/call destructor for this Vector "sensors" so all pointers are deleted? Or sensors vector is deleted? I want to clear the data and then add data to it.

If you want to add an item to the end of the vector, use the push_back method you've quoted above. If you want to add an item somewhere else in the vector, you'll need to add your own method which re-sizes if necessary, shifts the elements above the insert location up one place and then copies the new element into the correct slot. Something like this (untested):

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;
}

As Nacho points out, you might be better off with a linked list if you're going to do a lot of these insert operations, especially if the data you're storing is large and/or has a complex move operator.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM