I realise this may be too late to help the original poster, but since searching for 'vector' (as I did) brings you here, I'll post this for others:
It's relatively simple to write your own Vector class if you need basic functionality (no iterators, removing items once added etc.). The following class allows you to define your own Vector, push_back() objects and recall them with the [] notation.
// Minimal class to replace std::vector
template<typename Data>
class Vector {
size_t d_size; // Stores no. of actually stored objects
size_t d_capacity; // Stores allocated capacity
Data *d_data; // Stores data
public:
Vector() : d_size(0), d_capacity(0), d_data(0) {}; // Default constructor
Vector(Vector const &other) : d_size(other.d_size), d_capacity(other.d_capacity), d_data(0) { d_data = (Data *)malloc(d_capacity*sizeof(Data)); memcpy(d_data, other.d_data, d_size*sizeof(Data)); }; // Copy constuctor
~Vector() { free(d_data); }; // Destructor
Vector &operator=(Vector const &other) { free(d_data); d_size = other.d_size; d_capacity = other.d_capacity; d_data = (Data *)malloc(d_capacity*sizeof(Data)); memcpy(d_data, other.d_data, d_size*sizeof(Data)); return *this; }; // Needed for memory management
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
size_t size() const { return d_size; }; // Size getter
Data const &operator[](size_t idx) const { return d_data[idx]; }; // Const getter
Data &operator[](size_t idx) { return d_data[idx]; }; // Changeable getter
private:
void resize() { d_capacity = d_capacity ? d_capacity*2 : 1; Data *newdata = (Data *)malloc(d_capacity*sizeof(Data)); memcpy(newdata, d_data, d_size * sizeof(Data)); free(d_data); d_data = newdata; };// Allocates double the old space
};
Note that due to memory constraints it would be unwise to store large objects. Also note that due to differences between free and delete[], the destructor of objects stored in a Vector might not be called. Be careful when storing objects which contain allocated memory.
An example of usage is given below. This loops through the numbers 2 to 100, storing all prime numbers in the Vector "prime" and meanwhile having the led-light (on the Uno) blink them all out (so first it blinks twice, then 3 times, etc).
// Example of Vector usage: store prime numbers and blink LED
void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards:
pinMode(13, OUTPUT);
}
void blink(size_t n, size_t d = 1000) {
for (size_t idx = 0; idx < n; ++idx) {
digitalWrite(13, HIGH);
delay(d/2);
digitalWrite(13, LOW);
delay(d/2);
}
}
void loop() {
Vector<size_t> prime;
for (size_t num = 2; num < 100; ++num) {
boolean isPrime = true;
for (size_t idx = 0; idx < prime.size(); ++idx)
if (!(num % prime[idx])) {
isPrime = false;
break;
}
if (!isPrime)
continue;
prime.push_back(num);
blink(num);
delay(1000);
}
}
Edit: Added memory management for copy constructor and assignment-operator. We wouldn't want that to fail...