迭代矢量如何检查我的位置
iterating a vector how to check at which position I am?
示例:
for (vector<string>::reverse_iterator it = myV.rbegin(); it != myV.rend(); ++it)
{
cout << "current value is: " << *it << ", and current position is: " << /* */ << endl;
}
我知道我可以检查矢量中有多少个项目,制作计数器,依此类推。但是我想知道是否有更直接检查当前索引的方法,而无需断言我正确的矢量。
向量迭代器支持差异您可以从rbegin中减去当前迭代器。
编辑
正如评论中指出的,并非所有迭代器都支持操作员-STD ::距离必须使用。但是,我不建议这样做,因为std ::距离会导致迭代器的衬里时间性能成本,而迭代器不是随机访问的,而如果您使用it - begin()
,则编译器会告诉您不起作用,然后如果必须,则可以使用距离。
从当前迭代器中减去std::vector<T>::begin()
(或rbegin()
)。这是一个小例子:
#include <vector>
#include <iostream>
int main()
{
std::vector<int> x;
x.push_back(1);
x.push_back(1);
x.push_back(3);
std::cout << "Elements: " << x.end() - x.begin();
std::cout << "R-Elements: " << x.rend() - x.rbegin();
return 0;
}
正如上面非常出色的评论中指出的那样,std::distance
可能是一个更好的选择。std::distance
支持在恒定时间内随机访问迭代器,但也支持线性时间的其他类别。
迭代器用于允许将通用算法写入容器的选择。我在STL书中读到这很棒,但是可能导致性能下降,因为有时容器的成员功能对容器进行了优化,并且比依赖迭代器的通用代码更快地运行。在这种情况下,如果您要处理大型向量,则将调用std ::距离,尽管不需要常数。如果您知道您将使用Oly Vector作为此算法,则可以认识到它支持直接访问操作员" []"并写下类似的内容:
#include <vector>
#include <iostream>
using namespace std;
int main ()
{
vector<int> myV;
for (int I = 0; I < 100; ++I)
{
myV.push_back(I);
}
for (int I = 0; I < myV.size(); ++I)
{
cout << "current value is: " << myV[I]
<< ", and current position is: " << I << endl;
}
return 0;
}
如果您对速度感兴趣,则可以随时尝试在此处提出的不同答案并测量执行时间。这可能取决于向量大小。
保持反面:
for (vector<string>::reverse_iterator it = myV.rbegin(),
int pos = myV.size;
it != myV.rend(),
--pos;
++it)
{
cout << "current value is: " << *it << ", and current position is: " << pos << endl;
}
相关文章:
- 使用 valgrind 检查我的链表暗示中的内存泄漏,让我"肯定丢失:1 个块中有 40 个字节"
- C ,二进制树的高度,而不是检查我的子树是否为空,而是在检查我的子树是否是叶子节点.抛出分割故障
- 六计算器问题.有人可以再次检查我的代码吗?
- 使用模板检查我的类的两个实例是否相等
- 如何在用于删除节点的函数中检查我的链表是否C++为空
- 检查我的 C++ 代码!我的cmd屏幕在运行后关闭!我的错误可能是什么
- 迭代矢量如何检查我的位置
- 如何检查我的 c++ 程序在内存中增长的状态
- 如何检查我的类的两个实例是否相等
- 为什么我的代码只检查我的刽子手游戏(C ++)中单词的第一个字母
- 如何检查我的 gcc 版本
- 在 C++ 中检查我的删除函数的范围
- 仔细检查我的知识:Unicode
- 如何通过C++检查我的程序是否在管理员权限下运行
- 如果启用了BOOST,如何检查我的代码
- 我如何用程序检查我的电脑是否在代理后面
- 检查我的互联网提供商是否支持并在我的操作系统中以编程方式启用IPv6/Teredo
- 如何检查我的代码是否在GCC中重新编译
- 我如何检查我的多线程程序是否在c++中正常工作
- 是否可以在 Windows C++ 中以编程方式检查我的笔记本电脑是通过 Wi-Fi 还是通过"wired LAN"连接的?