标签: iterator

如何使用std :: copy读取任意数量的值?

我正在尝试对此进行相反的操作:

std::ostream outs; // properly initialized of course
std::set<int> my_set; // ditto

outs << my_set.size();
std::copy( my_set.begin(), my_set.end(), std::ostream_iterator<int>( outs ) );
Run Code Online (Sandbox Code Playgroud)

它应该是这样的:

std::istream ins;

std::set<int>::size_type size;
ins >> size;

std::copy( std::istream_iterator<int>( ins ), std::istream_iterator<int>( ins ) ???, std::inserter( my_set, my_set.end() ) );
Run Code Online (Sandbox Code Playgroud)

但是我坚持使用'end'迭代器 - 输入交互器不能使用std :: advance,我也不能使用两个具有相同源的流...

有什么优雅的方法如何解决这个问题?当然我可以用于循环,但也许有更好的东西:)

c++ iterator istream-iterator stl-algorithm

8
推荐指数
1
解决办法
1574
查看次数

C++:如何编写const_iterator?

我用迭代器编写了自己的容器模板.我如何实现const_iterator?

template <class T>
class my_container {
 private:
  ...

 public:
  my_container() : ... { }
  ~my_container() { }

  class iterator : public std::iterator<std::bidirectional_iterator_tag, T> {
  public: ...
Run Code Online (Sandbox Code Playgroud)

c++ iterator const-iterator

8
推荐指数
1
解决办法
8261
查看次数

Iterator如何处理已检查的异常?

我在java.util.Iterator中包装java.sql.RecordSet.我的问题是,如果任何记录集方法抛出SQLException,我该怎么办?

java.util.Iterator中的javadoc解释了在各种情况下抛出什么样的异常(即NoSuchElementException异常的情况下,调用next()超出了最后一个元素)

但是,它没有提到当存在由网络或磁盘IO问题引起的完全不相关的问题时该怎么做.

只是在next()和hasNext()中抛出SQLException是不可能的,因为它与Iterator接口不兼容.

这是我目前的代码(简化):

public class MyRecordIterator implements Iterator<Record>
{
    private final ResultSet rs;

    public MyRecordIterator() throws SQLException
    {
        rs = getConnection().createStatement().executeQuery(
                "SELECT * FROM table");         
    }

    @Override
    public boolean hasNext()
    {
        try
        {
            return !rs.isAfterLast();
        }
        catch (SQLException e)
        {
            // ignore, hasNext() can't throw SQLException
        }
    }

    @Override
    public Record next()
    {
        try
        {
            if (rs.isAfterLast()) throw new NoSuchElementException();
            rs.next();
            Record result = new Record (rs.getString("column 1"), rs.getString("column 2")));
            return result;
        }
        catch (SQLException e) …
Run Code Online (Sandbox Code Playgroud)

java iterator exception-handling recordset

8
推荐指数
1
解决办法
1899
查看次数

为什么在C++ STL中存在算法,迭代器和容器的分离

我无法弄清楚为什么他们在C++ STL中分离了算法,迭代器和容器.如果在任何地方大量使用模板,那么我们可以使用模板参数将所有内容放在一个地方.

我得到的一些文本解释了迭代器有助于算法与容器数据交互,但是如果容器暴露了一些机制来访问它拥有的数据呢?

c++ algorithm containers iterator stl

8
推荐指数
1
解决办法
2162
查看次数

Python Custom Iterator:关闭StopIteration上的文件

我编写了一个迭代器类,在其中打开一个文件__init__.

def __init__(self, path):
    self.file = open(path, "r")
Run Code Online (Sandbox Code Playgroud)

迭代完成后如何自动关闭该文件?

完整课程:

class Parse(object):
    """A generator that iterates through a CC-CEDICT formatted file, returning
   a tuple of parsed results (Traditional, Simplified, Pinyin, English)"""
    def __init__(self, path):
        self.file = open(path, "r")

    def __iter__(self):
        return self

    def __is_comment(self, line):
        return line.startswith("#")

    def next(self):
        #This block ignores comments.
        line = self.file.readline()
        while line and self.__is_comment(line):
            line = self.file.readline()

        if line:
            working = line.rstrip().split(" ")
            trad, simp = working[0], working[1]
            working = " ".join(working[2:]).split("]") …
Run Code Online (Sandbox Code Playgroud)

python file-io iterator

8
推荐指数
1
解决办法
2443
查看次数

如何正确迭代一个大的json文件

亲爱的Stackoverflow社区,

我有一个34 GB的json文件,里面有很多数据.我试图通过使用mongoimport --file file.json导入到我的mongodb中 - 但它失败了,因为文件太大而且扔了一个你知道的内存系统抛出错误.是否可以使用PHP代码使用游标迭代文件?我对此没有经验,有人告诉我这是可能的.我想知道文件是如何构建的,但我不知道如何查看它的示例数组.从源代码我可以得到一个示例数组:

{
     "_id": ObjectId("53b29644aafd413977b23b7e"),
     "summonerId": NumberLong(24570940),
     "region": "euw",
     "updatedAt": NumberLong(1404212804),
     "season": NumberLong(4),
     "stats": {
         "110": {
             "totalSessionsPlayed": NumberLong(3),
             "totalSessionsLost": NumberLong(2),
             "totalSessionsWon": NumberLong(1),
             "totalChampionKills": NumberLong(34),
             "totalDamageDealt": NumberLong(415051),
             "totalDamageTaken": NumberLong(63237),
             "mostChampionKillsPerSession": NumberLong(12),
             "totalMinionKills": NumberLong(538),
             "totalDoubleKills": NumberLong(5),
             "totalTripleKills": NumberLong(1),
             "totalDeathsPerSession": NumberLong(18),
             "totalGoldEarned": NumberLong(40977),
             "totalTurretsKilled": NumberLong(6),
             "totalPhysicalDamageDealt": NumberLong(381668),
             "totalMagicDamageDealt": NumberLong(31340),
             "totalAssists": NumberLong(25),
             "maxChampionsKilled": NumberLong(12),
             "maxNumDeaths": NumberLong(10)
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

字段统计包含更多数组,110只是一个示例.如何迭代这个大文件或如何将其导入我的mongodb?例如; 我想要回忆summonerid,championid(在这种情况下是110),totalSessionsPlayed.它必须尽可能多地重新循环,直到没有为这个特殊的召唤者留下任何冠军.

再一次......一个召唤者ID有一个在他的职业生涯中一直在玩的冠军名单.冠军指的是(在这个例子中)110.每一个召唤者都可以包含多个冠军,我希望拥有所有冠军,召唤者总共玩过多少次冠军(全部激情).

php arrays json iterator mongodb

8
推荐指数
1
解决办法
4840
查看次数

解决扩展特征的局限性

具有对象安全特性FooFooExt为所有实例实现的(可能不安全的)扩展特征的模式Foo现在似乎成为标准.

https://github.com/rust-lang/rfcs/pull/445

对于我来说这是一个问题Iterator<A>,因为我有一个库来覆盖IteratorExt#last()旧迭代器特征的默认方法(底层库有一个有效的实现last()).现在这是不可能的,因为对于任何人来说A,总会有一个冲突的特质实施IteratorExt,即libcore已经为所有人提供的实施Iterator<A>.

iterator.rs:301:1: 306:2 error: conflicting implementations for trait `core::iter::IteratorExt` [E0119]

iterator.rs:301 impl<'a, K: Key> iter::IteratorExt<Vec<u8>> for ValueIterator<'a,K,Vec<u8>> {
iterator.rs:302   fn last(&mut self) -> Option<Vec<u8>> {
iterator.rs:303      self.seek_last();
iterator.rs:304      Some(self.value())
iterator.rs:305   }
iterator.rs:306 }
...
Run Code Online (Sandbox Code Playgroud)

现在,据我所知,我有两个选择:

  • 有我自己的特点和我自己的last()实现.IteratorExt除非仔细使用,否则这意味着它会导致冲突.last()如果使用版本from,这也有意外使用低效版本的危险IteratorExt.我放松了方便的访问IteratorExt.
  • 拥有自己的特征并以不同方式命名方法(seek_last()).缺点:我要求用户学习词汇,并总是喜欢我的方法而不是提供的方法IteratorExt.同样的问题:我想避免意外使用last().

我还缺少其他更好的解决方案吗?

iterator traits rust

8
推荐指数
1
解决办法
400
查看次数

自定义迭代器与std :: sort一起使用但不与tbb :: parallel_sort一起使用?

我试图用来tbb::parallel_sort同时排序2个数组.英特尔的文档在这里说https://software.intel.com/en-us/node/506167 The requirements on the iterator and sequence are the same as for std::sort..似乎并非如此.我的自定义迭代器工作得很好,std::sort但产生编译错误tbb::parallel_sort.请看下面的代码:

int main()//needs boost and tbb to compile
{
    int values_size = 6;
    int nums1[] = {5, 8, 7, 89, 56, 4};
    int nums2[] = {2, 1, 1, 4, 9, 2};

    //WORKS!
    std::sort(do_dual_sort.make_iter(nums1, nums2), 
    do_dual_sort.make_iter(nums1+values_size, nums2+values_size),
    do_dual_sort.make_comp_desc(nums1, nums2));

    //DOESN'T COMPILE
    tbb::parallel_sort(do_dual_sort.make_iter(nums1, nums2), 
    do_dual_sort.make_iter(nums1+values_size, nums2+values_size),
    do_dual_sort.make_comp_desc(nums1, nums2));

    for(unsigned int i = 0; i < values_size; i++) cout << "nums1[" << …
Run Code Online (Sandbox Code Playgroud)

c++ iterator tbb

8
推荐指数
3
解决办法
766
查看次数

使用整数和单词对字符串进行排序,而不改变其位置

说我有一个字符串a.

a = "12 I have car 8 200 a"
Run Code Online (Sandbox Code Playgroud)

我需要以输出应该这样的方式对这个字符串进行排序

8 a car have 12 200 I
Run Code Online (Sandbox Code Playgroud)

即,对字符串进行排序,使所有单词按字母顺序排列,所有整数按数字顺序排列.此外,如果字符串中的第n个元素是整数,则它必须保持整数,如果是单词则必须保留为单词.

这是我试过的.

a = "12 I have car 8 200 a"


def is_digit(element_):
    """
    Function to check the item is a number. We can make using of default isdigit function
    but it will not work with negative numbers.
    :param element_:
    :return: is_digit_
    """
    try:
        int(element_)
        is_digit_ = True
    except ValueError:
        is_digit_ = False

    return is_digit_



space_separated = a.split()

integers = [int(i) for …
Run Code Online (Sandbox Code Playgroud)

python sorting performance iterator python-2.7

8
推荐指数
1
解决办法
732
查看次数

std ::搜索单程范围

我想从a读取,std::istream直到找到一定数量的字符,即,我想实现以下接口:

void read_until (std::istream &is, std::string_view needle);
Run Code Online (Sandbox Code Playgroud)

使用std::istreambuf_iterator,我相信这相当于std::search单通道迭代器的组合.不幸的是,std::boyer_moore_searcher需要随机访问迭代器.

使用C++标准库(以及与大小成比例的一点内存sv)是否有上述接口的简单实现,或者我是否必须自己编写代码?

c++ search iterator boyer-moore c++17

8
推荐指数
1
解决办法
171
查看次数