gpt4 book ai didi

c++ - 接收任何可迭代容器

转载 作者:行者123 更新时间:2023-12-02 04:57:54 24 4
gpt4 key购买 nike

有没有办法接收任何可迭代容器作为参数?

我希望函数能够接收任何容器,同时能够对其进行 begin()end() 操作。除非我错了,否则每个容器都应该具有这些功能(std::view 没有?)。

具体来说,有没有办法接收 Container作为一个论点?

C++20 和/或模板都可以。

void do_stuff(any_iterable_collection<int> &coll) {
for (auto it = coll.begin() ; it != coll.end() ; ++it) {
// do stuff with *it
}
}

std::list<int> list;
std::vector<int> vector;
std::set<int> set;

do_stuff(list);
do_stuff(vector);
do_stuff(set);

最佳答案

您可以简单地使用与标准相同的方式执行此操作:

template <typename Iterator>
void do_stuff(Iterator first, Iterator last) {
for (auto it = first; it != last; it = std::next(it)) {
// do stuff with *it
}
}

int main() {

std::vector<int> vec = {1, 5, 9};
do_stuff(vec.begin(), vec.end());

return EXIT_SUCCESS;
}

如果您坚持使用容器:

template <template<typename> class Container>
void do_stuff(Container<int> &container) {
for (auto it = std::begin(container); it != std::end(container); it = std::next(it)) {
// do stuff with *it
std::cout << *it << std::endl;
}
}

或者对于更一般的容器:

template <template<typename> class Container, typename CType>
void do_stuff(Container<CType> &container) {
for (auto it = std::begin(container); it != std::end(container); it = std::next(it)) {
// do stuff with *it
std::cout << *it << std::endl;
}
}

关于c++ - 接收任何可迭代容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62238487/

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