检测均匀和奇数C 矢量迭代器
Detecting even and odd C++ vector iterators
我搜索了,我很惊讶这尚未问。我知道如何使用简单的循环进行操作,使用矢量迭代器呢?
for( std::vector<int>::iterator it = somevector.begin(); it != somevector.end(); ++it )
{
//Conditions stating a certain vector has an even or odd index.
}
对不起,我的意思是要检测到向量的索引是否奇怪甚至是。
这将是一种简单的方法:
{
bool is_even = true;
for (const auto& v: somevector) {
if (is_even) even_handler(v);
else odd_handler(v);
is_even = !is_even;
}
}
想要一个更复杂的解决方案吗?没问题:
#include <iostream>
#include <string>
#include <utility>
#include <vector>
using std::next;
template<typename Iter, typename Func, typename...Funcs>
void RotateHandlers(Iter b, Iter e, Func f, Funcs...fs) {
if (b != e) {
f(*b);
RotateHandlers(next(b), e, fs..., f);
}
}
int main() {
std::vector<std::string> v({"Hello", "world", "it's", "really", "great", "to", "be", "here"});
RotateHandlers(v.begin(), v.end(),
[](const std::string& s){std::cout << "First|" << s << std::endl;},
[](const std::string& s){std::cout << "Then |" << s << std::endl;},
[](const std::string& s){std::cout << "And |" << s << std::endl
<< " |" << std::string(s.size(), '-') << std::endl;}
);
return 0;
}
在此处查看:http://ideone.com/jmlv5f
我会猜测您的意思是您要检测当前索引是否均匀或奇怪:
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::vector<int> somevector;
somevector.push_back(1);
somevector.push_back(2);
somevector.push_back(4);
somevector.push_back(8);
somevector.push_back(111605);
for (auto it = somevector.begin(); it != somevector.end(); ++it)
{
// current index
const auto index = std::distance(somevector.begin(), it);
if ((index % 2) == 0) // even
{
std::cout << "Index " << index << " (even) is: " << *it;
}
else
{
std::cout << "Index " << index << " (odd) is: " << *it;
}
std::cout << std::endl;
}
}
您可以通过std::distance
获得迭代器之间的距离。(索引与开始距离。)
如果我正确理解[在上次编辑之前]的问题,则选项是:
bool is_odd(const std::vector<int> &somevector) {
for( std::vector<int>::iterator it = somevector.begin(); it != somevector.end(); ++it ) {
//Conditions stating a certain vector is even or odd.
if (*it % 2 == 0) {
return false;
}
}
return true;
}
分别用于"偶数向量"。
相关文章:
- 使用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::迭代器是否可以合法地作为指针
- 跟随整数索引列表的自定义类迭代器
- 当我发生碰撞检测时,矢量迭代器不兼容
- 如何在地图迭代器中检测最后一个元素
- 连续迭代器检测
- 检测容器是否具有迭代器类型
- 检测均匀和奇数C 矢量迭代器
- 检测环形缓冲区的无效迭代器
- 检测迭代器是否是std::map的最后一个元素
- Valgrind在简单迭代器类中检测到无效读取错误