gpt4 book ai didi

C++ 在 boost::ptr_container 中共享元素?

转载 作者:行者123 更新时间:2023-11-30 03:06:40 24 4
gpt4 key购买 nike

请考虑以下代码:

int main()
{
typedef boost::ptr_vector<int> ptr_vector;

ptr_vector vec0;
vec0.push_back(new int(1));
vec0.push_back(new int(2));
vec0.push_back(new int(3));
vec0.push_back(new int(4));
vec0.push_back(new int(5));

ptr_vector::iterator last = boost::prior(vec0.end()),
first = boost::prior(last, 3);

ptr_vector vec1(first, last); // this will copy '2, 3, 4' to vec1

struct print
{
void operator()(int const& i) {
std::cout << i.m_i << std::endl;
}
};

std::for_each(vec0.begin(), vec0.end(), print()); // 1, 2, 3, 4, 5
std::for_each(vec1.begin(), vec1.end(), print()); // 2, 3, 4

return 0;
}

我不想copy元素进入vec1 , 但以 shared_ptr<> 的方式分享提供。我的要求基本上是:

  • 在另一个容器实例中共享一系列对象的相同实例,这些对象是容器的一部分
  • 不想在这两个以上的容器中共享一个实例
  • 希望在一个元素“突然”从另一个容器中删除时收到通知(或者至少检查一下,例如 shared_ptr::unique() )

两个容器都属于同一个类。因此,它们具有相同的作用域,并且会同时被销毁。这些类的构造函数构造两个容器。 build 后不会对这些容器进行任何修改。

我需要使用 std::vector<> 吗?的 shared_ptr<>或者还有其他解决方案吗?

最佳答案

是的,你应该使用 vector<shared_ptr<int>> .

由于您只使用范围,您可以组合一个自定义解决方案来跟踪范围及其交集(用于实现 unique 。)然后,您可以将所有内容存储在 vector 中并将范围索引到那。这可能会更快(只是因为避免了缓存未命中),但实现起来会更费力。

关于C++ 在 boost::ptr_container 中共享元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6390123/

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