gpt4 book ai didi

c++ - 使用 std::vector 缓冲区的高效输入处理

转载 作者:行者123 更新时间:2023-11-30 00:37:12 25 4
gpt4 key购买 nike

我正在尝试寻找一种快速的输入方式,但我了解到,将 STL 用于此类目的可能会很慢。

每当我获得键盘输入时,我都会触发一个回调。它使用 (int _key, int _state, int _life)

创建一个对象

每次收到此回调时,我都会将对象push_back 到我的 std::vector;

每一帧我都会检查这个 vector 的顶部并移除“死”输入。

可以轮询 vector 以获取当时有效的任何输入,这意味着它将被频繁搜索。

优化:

-所有内存都应该是连续的,所以虽然链接列表更适合动态分配,但我应该坚持使用 STL 的 vector 吗?我总是在顶部添加并从底部删除,所以我应该使用什么数据结构?

-我正在考虑有一个缓冲区(第二个 vector )不断从回调接收新输入,然后每个帧将数据从该 vector 复制到我的事件输入 vector 的顶部。由于将轮询事件 vector ,这是否会提高性能,因为它不会在循环期间浪费时间添加?

基本上,我正在尝试尽可能多地从这个 vector 中获取性能,我需要一些帮助。

最佳答案

你所描述的,在一端添加数据,在另一端删除,是队列的原型(prototype)描述。这是在标准库中使用 std::queue 实现的。类。

这个队列类是所谓的容器适配器,这意味着它使用另一个容器进行实际存储。默认情况下它使用 std::deque ,但该容器不会将其数据保存在连续的内存区域中。但是,您可以使用几乎任何其他标准容器声明 std::queue,例如 std::vector(这是唯一保证将数据存储在连续内存区域中的容器):

std::queue<int, std::vector> my_queue_with_vector;
my_queue_with_vector.push(1);
my_queue_with_vector.push(2);
my_queue_with_vector.push(3);

while (!my_queue_with_vector.empty())
{
std::cout << my_queue_with_vector.top() << '\n';
my_queue_with_vector.pop(); // Remove top element in the queue
}

关于c++ - 使用 std::vector 缓冲区的高效输入处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13840311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com