【发布时间】:2019-08-07 02:06:41
【问题描述】:
假设我有一些T 类型的向量,即vector<vector<T>> vec。
现在,我想对每个嵌套向量的第 n 个元素执行一些 STL 算法。例如,我只想对每个向量的第 n 个元素进行排序,而保留所有其他元素不变。
为此,我需要某种迭代器,以便它遍历嵌套向量,但取消引用迭代器将产生向量的第 n 个元素。这是一种合理的方法吗?如果是,是否有任何现有的实现?最好在 STL 中。
动机:我需要对嵌套向量执行一些 STL 算法,但不能使用任何额外空间。
示例: 让 Adaptor<N>(It iterator) 成为我们想要的迭代器类,它是嵌套数组中位置 N 处元素的迭代器,在返回的迭代器上调用 next 会将我们带到在下一个嵌套数组中位置N 的元素。
vector<vector<int>> vec {{1,3,2}, {4,1,10}, {3,3,3}, {9,8,7}}
sort(Adaptor<2>(vec.begin()), Adaptor<2>(vec.end()));
将产生vec
{{1,3,2}, {4,1,3}, {3,3,7}, {9,8,10}}
【问题讨论】:
-
1) 不,这不是一个合理的方法,2) 没有实际意义,没有现有的实现。这似乎回答了你的问题。
-
您能否解释一下为什么不合理?
-
因为 C++ 迭代器根本无法以这种方式工作。取消引用迭代器会产生迭代器引用的值,而不是其他完全不相关的值。
-
当然可以,但是您不能创建自己的迭代器类来提供取消引用的覆盖吗?该值并非完全不相关。事实上,它总是在基本迭代器前面的 n 个位置。