C++ 使用循环中间的迭代器
我有一个向量“mydata”。我想以负方向迭代我的数据。迭代器应该从中间开始。 我希望使用以下方法C++ 使用循环中间的迭代器,c++,iterator,C++,Iterator,我有一个向量“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 } vector::const_迭代器点; int i,k; (
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
}
vector::const_迭代器点;
int i,k;
(假设k=10)
对于(i=k,points=mydata.begin()+k;i!=-1;i--,points--){
//做事
}
这种方式是向后迭代的正确方式吗?(我使用DEV C++,所以谓词和一些现代命令不能使用。)
希望您的建议能够做到这一点。使用
反向迭代器的可能解决方案,以及:
#包括
#包括
int main()
{
std::向量v;
对于(int i=0;i<10;i++)
{
v、 推回(i);
}
对于(std::vector::const_reverse_iterator it=v.rbegin()+(v.size()/2);
它!=v.rend();
it++)
{
std::cout使用reverse\u迭代器的可能解决方案和:
#包括
#包括
int main()
{
std::向量v;
对于(int i=0;i<10;i++)
{
v、 推回(i);
}
对于(std::vector::const_reverse_iterator it=v.rbegin()+(v.size()/2);
它!=v.rend();
it++)
{
std::cout您可以使用std::vector::const_reverse_迭代器。下面是如何从中间开始反向迭代向量的示例:
#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;
}
您可以使用std::vector::const_reverse_迭代器。下面是如何从中间开始向后迭代向量的示例:
#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;
}
因为它是向量,所以根本不需要使用迭代器:
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;
}
}
因为它是向量,所以根本不需要使用迭代器:
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;
}
}
大致有两种很好的解决方案。要么编写循环:
vector<int>::const_iterator i = v.begin() + 4;
do {
// stuff with *i
while (--i != v.begin());
大致有两种很好的解决方案。要么编写循环:
vector<int>::const_iterator i = v.begin() + 4;
do {
// stuff with *i
while (--i != v.begin());
你真的应该升级到一个最新的IDE和编译器。5年前,DEV-C++是垃圾。上次它是过时的垃圾。Jalf:好的。谢谢。任何免费版本PLZ。Windows上的哪个OS?你可能想看看MS VisualC++Express。如果你想要一个跨平台的IDE,代码有::块或Eclipse或A.还有一些。你自己选吧,或者直接用谷歌。@jalf:是的,windows xp。thanks@jalf:你说对了一半-Dev-C++是垃圾,但它确实是垃圾。你真的应该升级到最新的IDE和编译器。Dev-C++在5年前上次维护时是垃圾。今天,它是过时的垃圾。@jalf:好的。谢谢。有免费版本的plz.Wh吗在Windows上,你可能想看看MS VisualC++快车。如果你想要一个跨平台的IDE,代码有::Buffor或Eclipse或者其他几个。选择你的选择,或者只是使用谷歌。@是的。thanks@jalf:你说对了一半-Dev-C++是垃圾,但它确实是垃圾。[不是我的反对票]i
是多余的,因为你可以直接使用v[k]
而不是*(i+k)
。问题是关于使用迭代器,但你要使用索引。@MSalters:注意了。我想他想知道如何反向迭代向量。[不是我的反对票]i
是多余的,因为你可以直接使用v[k]
而不是*(i+k)
。问题是关于使用迭代器,但您使用的是索引。@MSalters:注意得好。我想他想知道如何反向迭代向量。