我的问题是我有两个论点vector<int>& ivec和const int& numb.有没有办法消除const int& numb?我只想对向量中的所有元素添加10.我也想消除if部分,因为它是空的.提前致谢.请递归地做.我的目标是在递归函数中使用尽可能少的参数.
#include <iostream>
#include <vector>
using namespace std;
vector<int> addten(vector<int>& ivec, const int& numb) {
if (numb == 0) {
} else {
ivec[numb - 1] += 10;
addten(ivec, numb - 1);
}
return ivec;
}
Run Code Online (Sandbox Code Playgroud)
你的代码感觉很奇怪.C++的方法是:
std::vector<int> vec; // your vector
// adds 10 in place
std::transform(vec.begin(), vec.end(), vec.begin(),
std::bind(std::plus<int>(), _1, 10));
// adds 10 out-of-place
std::vector<int> result;
std::transform(vec.begin(), vec.end(), std::back_inserter(result),
std::bind(std::plus<int>(), _1, 10));
Run Code Online (Sandbox Code Playgroud)
正如您特别要求的那样,我实现了一个非常差 foldl的C++,只能vector<T>在迭代器上运行而不是迭代器.
#include <vector>
#include <iostream>
// well, here comes C++ origami
template<typename Start, typename F, typename T>
Start foldl(Start s, F f, const std::vector<T>& v) {
return foldl_impl(s, f, v, 0);
}
template<typename Start, typename F, typename T>
Start foldl_impl(Start s, F f, const std::vector<T>& v,
typename std::vector<T>::size_type t) {
if(t == v.size()) return s;
typename std::vector<T>::size_type t2 = t++;
return foldl_impl(f(s, v[t2]), f, v, t);
}
int main()
{
std::vector<int> vec = {1, 2, 3, 4, 5, 6, 7};
std::vector<int> added =
foldl(std::vector<int>()
, [](std::vector<int>& v, int i) { v.push_back(i+10); return v;}
, vec);
for(auto x : added) {
std::cout << x << std::endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请考虑这远不是好的C++风格.
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |