说我从函数f(a,b)
得到{1,2}
(它不管什么f
是/),我想将它存储到int s[2]
。我会怎么做?看来我不能只是做int s[2] = f(a,b)
,我不能分开f
的输出,因为没有变量来获取值。 f(a,b)[0]
不起作用。将数组转换为变量
Q
将数组转换为变量
1
A
回答
3
这一切都取决于f
究竟返回什么。你不能简单地return {1, 2};
,所以它必须返回别的东西。它是一个衰减的数组指针吗?一个std::vector
?
如果它是一个指针,返回指针,然后分配值。
int* p = f(a, b);
s[0] = p[0];
s[1] = p[1];
如果s
是大于两个元素,那么这将是更好地使用std::copy
从<algorithm>
:
int* p = f(a, b);
std::copy(p, p + 2, s); // where 2 is the size of the array.
2
使用std::array
阵列封装,而不是:
std::array<int, 2> f(int, int);
std::array<int, 2> result = f(1, 2);
2
返回两个从功能上看,我更喜欢std::pair
:
#include <utility>
std::pair<int, int> f()
{
return std::make_pair(1, 2);
}
int main()
{
std::pair<int, int> p = f();
int s[2] = {p.first, p.second};
}
如果数组已经存在,你可以通过boost::tie
使分配更加容易:
boost::tie(s[0], s[1]) = f();
1
你可以复制它,在的memcpy(DEST,F(1,2),大小)。
或者您可以只返回一个结构。将数组包含在一个结构中以便通过运算符=()轻松复制它是一个古老的技巧。例如: -
struct Foo { int a, b };
Foo f(int, int);
int main()
{
Foo myF = f(1,2);
}
的结构包装变成有用以后,当你的代码的发展,以及您决定返回第三值。作为一个结构意味着你可以使其向后兼容的变化,并避免更改尽可能多的其他代码...
+0
喜欢使用'struct'的第二部分。不喜欢'memcpy'部分。 – Arun 2010-10-26 05:09:57
相关问题
- 1. 将数组值转换为变量
- 2. 将变量转换为字节数组
- 3. 将数组变量转换为csv
- 4. 将变量数组转换为std :: tuple
- 5. 将数组变量转换为另一个函数变量
- 6. 将数组存储为变量然后转换回数组
- 7. 将JavaScript变量转换为PHP变量
- 8. 将python变量转换为javascript变量
- 9. 将JavaScript变量转换为C#变量
- 10. 将分类变量转换为数字
- 11. 将日期变量转换为数字
- 12. 将数字变量转换为POSIXct
- 13. 将浮点变量转换为整数?
- 14. 熊猫:将多个变量转换为一组虚拟变量
- 15. 将Eigen :: PermutationMatrix.indices()转换为数组/矢量
- 16. 将矢量转换为数组
- 17. 将文本数组转换为向量
- 18. 为什么format()将数字变量转换为字符变量?
- 19. PHP找到数组并将其转换为变量
- 20. 使用jQuery将javascript数组转换为单个变量
- 21. 使用javascript将JSON数组转换为单个变量
- 22. 将PHP数组转换为可用变量
- 23. 在javascript中将变量值转换为(返回)数组?
- 24. 如何将byte []数组转换为字节类型变量?
- 25. 将1和0的数组转换为二进制变量
- 26. 将json格式变量转换为javascript数组
- 27. 将结果集变量转换为数组
- 28. 将年龄变量转换为序数变量
- 29. 将数值变量转换为SAS时间变量
- 30. 将数组转换为TreeView:JavaFX8
你如何从'f'获得'{1,2}'?你不能返回一个数组......' – 2010-10-25 20:33:45
'f()'有什么返回类型? – 2010-10-25 20:37:53
'f'的签名是什么?或者至少,f是什么类型的返回类型? – 2010-10-25 20:38:09