使用循环中间的迭代器
use of iterators from the middle of the loop
我有一个向量"mydata"的向量。我想在负方向上迭代我的数据。迭代器应该从中间开始。我希望使用以下方式;
vector<vector<int> >::const_iterator points;
int i, k;
(lets assume k = 10)
for (i=k, points=mydata.begin()+k; i != -1; i--, points--){
//do stuff
}
这种方式是向后迭代的正确方式吗?(我使用的是dev c++,所以不能使用谓词和一些现代命令。)希望你的建议能做到这一点。
使用reverse_iterator
、vector::rbegin()
和vector::rend()
的可能解决方案:
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
for (std::vector<int>::const_reverse_iterator it = v.rbegin()+(v.size()/2);
it != v.rend();
it++)
{
std::cout << *it << "n";
}
return 0;
}
您可以使用std::vector::const_reverse_iterator。以下是如何从中间开始向后迭代向量的示例:
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v;
for(int i = 0; i< 10; i++)
v.push_back(i);
std::vector<int>::const_reverse_iterator it = v.rbegin() + 5;
for(;it != v.rend(); it++)
{
std::cout << *it << std::endl;
}
return 0;
}
输出:
4
3
2
1
0
因为它是向量,所以根本不需要使用迭代器:
for (int k = 4; k >= 0; k--)
{
// do something with v[k]
}
示例:
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char** argv)
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
vector<int> v(arr, arr + 10);
for (int k = 4; k >= 0; k--)
{
cout << v[k] << endl;
}
}
输出:
5
4
3
2
1
大约有两个不错的解决方案。要么你只写循环:
vector<int>::const_iterator i = v.begin() + 4;
do {
// stuff with *i
while (--i != v.begin());
或者使用反向迭代器和标准STL算法:
std::for_each(v.rend()-4, v.rend(), &stuff);
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 如何在c++迭代器类型中包装std::chrono
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 对于set上的循环-获取next元素迭代器
- 为什么output_editor Concept不需要output_e迭代器标记
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 使用迭代器时如何访问对象在向量中的位置?
- std::vector::迭代器是否可以合法地作为指针
- 跟随整数索引列表的自定义类迭代器
- 不明白迭代器,引用和指针失效,一个例子
- 我可以使用反向迭代器作为ForwardIt吗
- ESP8266单片机矢量迭代器的C++问题
- 如何在C++中将迭代器作为函数参数传递
- 从两端开始浏览列表,然后使用迭代器在中间停止
- 如何使用迭代器实现从序列的中间到开始的循环
- 使用循环中间的迭代器
- 如何存储循环缓冲区迭代器的中间值