gpt4 book ai didi

c++ - 声明一个接受通用输入和输出迭代器的函数

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

我想修改此函数,以便通过采用输入迭代器并写入输出迭代器来模仿标准库算法,而不是当前正在执行的操作。

这是代码:

template <class T>
std::vector<std::vector<T>> find_combinations(std::vector<std::vector<T>> v) {
unsigned int n = 1;
for_each(v.begin(), v.end(), [&](std::vector<T> &a){ n *= a.size(); });
std::vector<std::vector<T>> combinations(n, std::vector<T>(v.size()));
for (unsigned int i = 1; i <= n; ++i) {
unsigned int rate = n;
for (unsigned int j = 0; j != v.size(); ++j) {
combinations[i-1][j] = v[j].front();
rate /= v[j].size();
if (i % rate == 0) std::rotate(v[j].begin(), v[j].begin() + 1, v[j].end());
}
}
return combinations;
}

使用方法:

std::vector<std::vector<int>> input = { { 1, 3 }, { 6, 8 } };
std::vector<std::vector<int>> result = find_combinations(input);

我的问题是写声明。我假设它涉及 iterator traits但我一直无法弄清楚语法。

最佳答案

首先,不要按值传递 vector 。返回值可能会被优化和移动(即使它不是 c++11),作为输入参数,编译器很难知道它是否可以只传递一个引用。

第二,你不能像那样初始化一个 vector 的 vector 。

现在,对于语法,只需使用:

std::vector<std::vector<T>> find_combinations(std::vector<std::vector<T>>& v) {

}

它会很好地工作。

关于c++ - 声明一个接受通用输入和输出迭代器的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19764842/

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