c++ - 为什么我不能将 std::begin/std::end 与 int(*p)[3] 一起使用,而我可以与 int(&p)[3] 一起使用?
问题描述
这有效:
void foo(int (&a)[3]) {
auto ibegin = begin(a);
auto ebegin = end(a);
}
虽然这不是:
void foo(int (*a)[3]) {
auto ibegin = begin(a);
auto ebegin = end(a);
}
我考虑int (&a)[3]
和int (*a)[3]
意思一样!
解决方案
您的代码类似于:
void foo(vector<int>& a) {
auto ibegin = begin(a);
auto ebegin = end(a);
}
void foo(vector<int>* a) {
auto ibegin = begin(a);
auto ebegin = end(a);
}
第一个有效,第二个无效,原因与它int (&a)[3]
在int (*a)[3]
. 当您使用指向集合的指针而不是引用时,您需要在将它们传递给标准库的begin
/时取消引用它们end
。
void foo(vector<int>* a) {
auto ibegin = begin(*a);
auto ebegin = end(*a);
}
void foo(int (*a)[3]) {
auto ibegin = begin(*a);
auto ebegin = end(*a);
}
推荐阅读
- matlab - 如何用matlab求解不同参数值的ODE?
- react-native - 更新应用程序时如何注销用户
- java - Java 软件:在特定日期后禁用
- mysql - 复杂查询 orddr by 和 group by 一起在语句上
- c# - WPF 在添加新行之前禁用与 DataGrid 的 TemplateColumn 交互
- javascript - 正则表达式 - 查找可以包含字符但不能以字符结尾的模式(javascript)?
- javascript - 如何使用变量为对象属性赋值?
- logstash - logstash,grok - 多行数据后如何匹配可选字段?
- java - '<> 不是抽象的,并且不会覆盖抽象方法 keyReleased',即使没有使用 keyReleased
- android - Layout Inspector - 如何查找文本元素的当前字体