例如,假设我想将值(1,2),(2,3),(3,4)等传递给一个函数,并让它返回一个数字列表,无论它们是什么,即在一些操作之后1,3,5,3,6。在C++中实现这个结果的最好方法是什么?从python移动之后,在这里执行它似乎要困难得多,有什么帮助吗?将元组传递给函数并返回数字列表的最佳方法?
回答
我并不是说这是最好的方式,但我认为这是相当不错的,也从内存复制前瞻性,注意我避免返回vector
(昂贵,因为它调用operator=
隐):
#include <vector>
using namespace std;
/**
* Meaningful example: takes a vector of tuples (pairs) values_in and returns in
* values_out the second elements of the tuple whose first element is less than 5
*/
void less_than_5(const vector<pair<int, int> >& values_in, vector<int>& values_out) {
// clean up the values_out
values_out.clear();
// do something with values_in
for (vector<pair<int, int> >::iterator iter = values_in.begin(); iter != values_in.end(); ++iter) {
if (iter->first < 5) {
values_out.push_back(iter->second);
}
}
// clean up the values_out (again just to be consistent :))
values_out.clear();
// do something with values_in (equivalent loop)
for (int i = 0; i < values_in.size(); ++i) {
if (values_in[i].first < 5) {
values_out.push_back(values_in[i].second);
}
}
// at this point values_out contains all second elements from values_in tuples whose
// first is less than 5
}
你能解释一下'vector
这本身就是一个全新的问题:)但它在概念上很简单。每个集合都有一个迭代器(用于迭代该集合的元素),并且您可以访问集合的begin()和end()元素。为了得到迭代器类型,你可以简单地使用这种类型的特征,在这种情况下,'vector
好吧,如果我理解正确,那么你实现for循环的方式是从vector中的第一对数字开始,最后一对结束数字?你为什么写iter!=而不是==?确切地说, – 2012-08-12 10:48:24
一般而言,您将使用std::vector
容器及其方法push_back
。然后你可以返回矢量(按值返回,不要费心去分配它,因为你的编译器可能支持move-semantics)。
std::vector<int> func(
const std::tuple<int, int>& a, const std::tuple <int, int>& b)
{
std::vector<int> ret;
ret.push_back(...);
ret.push_back(...);
return ret;
}
每当我尝试实现这个时,我都会收到“没有类型的元组的C++禁止声明”错误。有任何想法吗? – 2012-08-12 10:45:33
该函数具有一组元组作为输入,而不仅仅是2个元组,返回矢量的效率非常低,并且通常证明可读性较差。 – 2012-08-12 10:46:02
你错过了包括尝试'#包括
void function(const std::vector<std::pair<int,int>> &pairs,
std::vector<int> &output) {
/* ... */
}
您能否澄清一下为什么配对和输出是这段代码中的引用? – 2012-08-12 10:28:01
,以避免复制昂贵的完整向量 – 2012-08-12 10:31:59
@GiovanniAzua [移动语义](http://stackoverflow.com/questions/3106110/)使得返回一个非常便宜的矢量。 – fredoverflow 2012-08-12 11:03:14
- 1. Swift - 将嵌套数组传递给函数的最佳做法
- 2. 传递/返回值的最佳方法
- 3. 如何将参数传递给类方法并将值返回给主方法?
- 4. 尝试将指向数组的指针传递给方法并将其返回
- 5. 将字节数组传递给函数
- 6. 将用户输入数组传递给方法并返回一个整数?
- 7. 将列表传递给DrRacket中的多元函数(方案)
- 8. 数组列表中的参数并传递给新函数? C
- 9. 传递一系列函数中数据的最佳方法?
- 10. 将元组传递给Python函数
- 11. Go - 将数组传递给接收参数列表的函数
- 12. 无法将数组传递给方法
- 13. 将JavaScript函数的值传递给JSP脚本并返回
- 14. 方法中的数组元素并返回数组返回值
- 15. 将许多参数传递给方法的最佳实践?
- 16. 将回调函数传递给std :: map的最佳方式是什么?
- 17. 这是将数组传递给函数的正确方法吗?
- 18. 将2维数组传递给函数的正确方法
- 19. 如何将我的函数返回值传递给父函数
- 20. C++如何将两个数组传递给函数并返回它们两者?
- 21. 将函数传递给innerHTML方法
- 22. 将函数传递给Contains Linq方法
- 23. 从函数返回列表的元组
- 24. 将数组传递给函数并扫描字符串
- 25. 如何将值列表传递给期望数组的函数?
- 26. 将列表传递给一个函数
- 27. Flash CS4将变量从javascript函数传递给actionscript并返回
- 28. 将变量传递给函数并返回
- 29. 搜索数组并返回结果的最佳方法
- 30. 如何将数组传递给方法?
最好的答案可能取决于你到底在做什么。你需要将这些值作为元组传递吗?你可以将它们作为一个单独的矢量传递吗?你打算如何处理返回的值? – 2012-08-12 10:21:59