标签: iterator

是否可以回滚PDO结果?

我正在尝试为PDO语句的结果编写一个迭代器,但我找不到任何重绕到第一行的方法.我想避免调用fetchAll和存储所有结果数据的开销.

// first loop works fine
foreach($statement as $result) {
    // do something with result
}

// but subsequent loops don't
foreach($statement as $result) {
    // never called 
}
Run Code Online (Sandbox Code Playgroud)

有没有办法重置声明或寻找第一行?

php pdo iterator

14
推荐指数
3
解决办法
9023
查看次数

如何减轻在C++中检查迭代器值的语法开销?

基本上,我有点厌倦写作:

std::map<key_t, val_t> the_map;
...
auto iterator = the_map.find(...);
if(iterator != the_map.end()) { // note the "inversed" logic and logically superflous end() call
  ...
}
Run Code Online (Sandbox Code Playgroud)

真正有意义的是:

if(auto x=the_map.find(...)) {
  ... // x could either be an iterator or maybe something like boost::optional<val_t>
}
Run Code Online (Sandbox Code Playgroud)

是否有一些现有技术定义了一些辅助工具来缩短!= container.end()语法,或者我是唯一一个因此而烦恼的人?

c++ iterator stl

14
推荐指数
2
解决办法
375
查看次数

c ++在for循环中初始化2个不同的迭代器

可能重复:
我可以在for循环的初始化中声明不同类型的变量吗?

我想在c ++中有一个for循环,它在初始化中构造了两种不同类型的向量迭代器.

这是我想要的大致想法:

std::vector<double> dubVec;
std::vector<int> intVec;
double result = 0;

dubVec.push_back(3.14);
intVec.push_back(1);

typedef std::vector<int>::iterator intIter;
typedef std::vector<double>::iterator dubIter;

for (intIter i = intVec.begin(), dubIter j = dubVec.begin(); i != intVec.end(); ++i, ++j)
{
  result += (*i) * (*j);
}
Run Code Online (Sandbox Code Playgroud)

任何人都知道在这种情况下要做的标准是什么?我不能只为intVec使用double的向量,因为我正在寻找一个通用的解决方案.[即我可能有一些函数f,它将int加倍,然后计算f(*i)*(*j)]

c++ iterator initialization

14
推荐指数
2
解决办法
3万
查看次数

const_iterator和const_iterator :: value_type的constness

为何选择STL

std::iterator_traits<const T*>::value_type
Run Code Online (Sandbox Code Playgroud)

与...的类型相同

std::iterator_traits<T*>::value_type
Run Code Online (Sandbox Code Playgroud)

为什么它的设计是这样的?首先不应该是const T而第二个是T吗?你应该如何采用底层const正确类型的迭代器?我知道你可以编写自己的模板类和专业化并从中获取

    std::iterator_traits<const T*>::pointer
Run Code Online (Sandbox Code Playgroud)

但不应该有一个成员typedef持有它吗?

c++ iterator const-iterator iterator-traits

14
推荐指数
2
解决办法
1613
查看次数

我将如何在Java中迭代堆栈

我想知道如何在Stack类中使用迭代器.如何为它创建迭代器类?

java stack iterator

14
推荐指数
1
解决办法
5万
查看次数

Python中的list和iterator有什么区别?

我正在读" Think Python:如何像计算机科学家一样思考"这本书,它说在Python 3.x中,dict([list of tuples])返回一个iterator而不是一个list(如Python 2.7中的情况).

这本书没有进一步解释,这让我感到困惑.特别是,我想知道:

  1. 迭代器和列表是如何不同的,以及

  2. 在列表上返回迭代器有什么好处?

python iterator list python-2.7 python-3.x

14
推荐指数
4
解决办法
1万
查看次数

类指针类和 - >*运算符

我最近遇到了将指针指向成员应用于迭代器指定的对象的需要.我尝试过自然语法:

ite->*ptr = 42;
Run Code Online (Sandbox Code Playgroud)

令我沮丧的是,它没有编译.迭代器不会过载operator->*,但更令人惊讶的是智能指针也不会.我需要诉诸以下笨拙:

(*ite).*ptr = 42;
Run Code Online (Sandbox Code Playgroud)

试验(参见下面的实例)已经表明,对于自定义类,对于指向成员的指针和指向成员函数的指针,这样的语法似乎是可以实现的,至少从C++ 14开始.

因此:

  • 标准类指针类不会过载operator->*,还是仅仅是一种疏忽?
  • operator->*在定义类似指针的类时,我应该重载,还是同样的理由适用于我?

实例 - 什么是编译,什么不编译,以及自定义类的概念验证.

c++ iterator smart-pointers operator-overloading c++14

14
推荐指数
1
解决办法
333
查看次数

加入 &amp;str 的迭代器

将 an 转换Iterator<&str>为 a的规范方法是什么String,穿插一些常量字符串(例如"\n")?

例如,给定:

let xs = vec!["first", "second", "third"];
let it = xs.iter();
Run Code Online (Sandbox Code Playgroud)

有一种方法可以s通过收集到 someIterablejoining 结果来生成字符串:

let s = it
    .map(|&x| x)
    .collect::<Vec<&str>>()
    .join("\n");
Run Code Online (Sandbox Code Playgroud)

但是,这不必要地为Vec<&str>. 有没有更直接的方法?

iterator rust

14
推荐指数
4
解决办法
8562
查看次数

如何从冻结集中获取任意元素?

我想从冻结集中获取一个元素(当然,不修改它,因为frozensets是不可变的).到目前为止我找到的最佳解决方案是:

s = frozenset(['a'])
iter(s).next()
Run Code Online (Sandbox Code Playgroud)

按预期返回:

'a'
Run Code Online (Sandbox Code Playgroud)

换句话说,有没有任何方法可以从冻结集中"弹出"一个元素而不实际弹出它?

python iterator set immutability

13
推荐指数
3
解决办法
1万
查看次数

为什么我不能从iterator_traits获取value_type?

我这样做:

const int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };
const auto foo = cbegin(arr);
const typename iterator_traits<decltype(foo)>::value_type bar = 1;
Run Code Online (Sandbox Code Playgroud)

我本来期望bar有这种类型int.但相反,我得到一个错误:

错误C2039 :: value_type不是.的成员std::iterator_traits<_Ty *const >

这是const我需要剥离那个什么的问题吗?

c++ types iterator typename iterator-traits

13
推荐指数
2
解决办法
647
查看次数