c++ - 自定义迭代器范围函数无效输出
问题描述
我想实现范围函数来遍历容器
template<class IterT>
struct iteratorRange {
IterT begin_;
IterT end_;
IterT begin() {
return begin_;
}
IterT end() {
return end_;
}
};
template<class T>
iteratorRange<typename vector<T>::iterator>Head(vector<T> v, size_t step) {
return {begin(v), next(begin(v), min(step, v.size()))};
}
int main() {
vector<int> v {1, 2, 3, 4, 5, 6, 7};
for (int& i : Head(v, 4)) {
cout << i << ' ';
}
}
我期望
1 2 3 4
但是收到了
1103219 1109239 3 4
错误是什么?
解决方案
template<class T>
iteratorRange<typename vector<T>::iterator>Head(vector<T>& v, size_t step) {
return {begin(v), next(begin(v), min(step, v.size()))};
}
而不是 Head 按值获取向量 v ,它应该接受一个引用。这解决了你的问题。
推荐阅读
- c# - 为什么 asp-route 和 asp-action 互斥?
- javascript - 如何轻松测量 JSON 对象的复杂性?
- css - 视网膜检测中精灵的缩放图标
- r - 无法从 Sharepoint Excel 文件导入到 R 数据集
- reactjs - 将 S3 存储桶对象的音频元数据映射到 DynamoDB
- r - 以正确的方式读取日志文件
- javascript - 如何在 JavaScript 中计算对象数组中的某些元素?
- python - Azure python ComputeManagementClient 检索虚拟机规模集的计算机数量(按日期)
- spacy - 如何微调 spacys 词向量
- amazon-web-services - ECS如何查看图片下载时间?