gpt4 book ai didi

c++ - 如何从数据结构 vector 中收集迭代器

转载 作者:太空宇宙 更新时间:2023-11-04 12:37:03 24 4
gpt4 key购买 nike

我正在寻找有关我正在尝试编写的函数的帮助。目的是获取已加载到 vector 中的各种数据结构的所有迭代器。

例如:

std::vector<std::unique_ptr<XXXX<std::string>>>

其中 XXXX 是获取迭代器的结构。

实例

std::vector<std::unique_ptr<std::multiset<std::string>>>
std::vector<std::unique_ptr<custom_list<std::string>>>
std::vector<std::unique_ptr<custom_tree<std::string>>>

已编辑:删除拼写错误

下面是我目前写的代码,但是它非常复杂而且编译不正确

template <typename L, typename V>
bool get_iterators(L to_sort, V all_iterator)
{
for (auto &&pointer : *(to_sort))
{
if (typeid(pointer) == typeid
(std::unique_ptr<std::multiset<std::string>>))
{
all_iterator->push_back(pointer->begin());
}
else
{
return false;
}
}
return true;
}

template <typename T>
void merge_sort(T &to_sort)
{
if (typeid(to_sort) == typeid(std::vector<std::unique_ptr<std::multiset<std::string>>>))
{
std::vector<std::multiset<std::string>::iterator> all_iterator;
get_iterators(&to_sort, &all_iterator);


}
else
{
...
}
}

扩展代码也可以做

if (typeid(pointer) == typeid(std::unique_ptr<std::XXXX<std::string>>))

这似乎很不必要。此外,当我添加这些额外检查时,我会收到编译错误,提示未找到有效函数。

如上目的是获取各种数据结构的所有迭代器。

最佳答案

这是简单的模板答案:

template<class V>
auto get_iterators(V &v) {
std::vector<decltype(v.front()->begin())> ret;
for(auto &u : v)
ret.push_back(u->begin());
return ret;
}

通过按值返回,简化了客户端:

auto iters=get_iterators(to_sort);

这很容易避免使用迭代器重复实际算法。

关于c++ - 如何从数据结构 vector 中收集迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55979593/

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