I’m trying to find a fast way to do input but I’ve learned that using STL for such purposes might be slow.
I have a callback that fires whenever I get Keyboard input.
It creates an object with (int _key, int _state, int _life)
Everytime I receive this callback, I push_back the object to my std::vector;
Every frame I check the top of this vector and remove the “dead” input.
The vector can be polled for whatever input is valid at that moment which means it will be searched frequently.
Optimizations:
-All the memory should be contiguous so although Link Lists are better for dynamic allocation, should I stick with STL’s vector? I’m always adding to the top and removing from the bottom so what data struct should I use?
-I was thinking of having a buffer(second vector) that continuously receives new input from the callback, then each frame copy the data from that vector to the top of my active input vector. Since the active vector will be polled, would this increase performance since it won’t be wasting time getting added to during the loop?
Basically I’m trying to squeeze as much performance from this vector as possible and I could use some help.
What you are describing, adding data in one end, removing in another, is the archetypical description of a queue. This is implemented in the standard library with the
std::queueclass.This queue class is a so-called container adapter, meaning it uses another container for the actual storage. By default it uses
std::deque, but that container doesn’t keep its data in a contiguous memory area. However you can declare astd::queuewith almost any other standard container, likestd::vector(which is the only container guaranteed to store data in a contiguous memory area):