gpt4 book ai didi

相当于tailq的C++

转载 作者:行者123 更新时间:2023-11-28 04:57:55 25 4
gpt4 key购买 nike

我想知道是否存在与 tailq 等效的标准 C++ 类。我可以使用 tailq 的 c 实现,但它使用了很多宏并且有点难看。

基本上,我有一个类,每个实例都必须是多个列表的一部分。为了避免额外的 malloc 的/内存取消引用,我想存储 nextprev类本身内的指针。 C++ 是否有聪明的方法来做到这一点,还是我最好只使用 <sys/queue.h>

最佳答案

C++我会有 shared_ptr 的容器.没关系,可以std::liststd::vector或任何容器。因为有 shared_ptr你有单独分配的每个元素,我看不出有什么好的理由使用 std::list所以我会选择std::vector<std::shared_ptr<X>>

例子:

#include <memory>
#include <vector>
#include <iostream>

struct X { int a = 0; X() = default; X(int p) { a = p; } };

auto operator<<(std::ostream& os, X x) -> std::ostream&
{
os << x.a;
return os;
}

int main()
{
auto x1 = std::make_shared<X>(24);
auto x2 = std::make_shared<X>(11);
auto x3 = std::make_shared<X>(1024);
auto x4 = std::make_shared<X>(5);

std::vector<std::shared_ptr<X>> v1 = {x1, x2, x3, x4};
std::vector<std::shared_ptr<X>> v2 = {x3, x1, x4};

// modify an object and observe the change in both lists
x1->a = -24;

for (const auto& e : v1)
std::cout << *e << ' ';
std::cout << '\n';

for (const auto& e : v2)
std::cout << *e << ' ';
std::cout << '\n';
}

输出是:

-24 11 1024 5
1024 -24 5

关于相当于tailq的C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46769767/

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