标签: iterator

为什么在for循环中访问比在-O0中的范围内访问更快但在-O3中不访问?

我正在学习C++(和C++ 11)的性能.我需要在调试和发布模式下执行,因为我花时间进行调试和执行.

我对这两个测试感到惊讶,并且对不同的编译器标志优化有多大的改变.

测试迭代器1:

  • 优化0(-O0):更快.
  • 优化3(-O3):较慢.

测试迭代器2:

  • 优化0(-O0):较慢.
  • 优化3(-O3):更快.

PD:我使用以下时钟代码.

测试迭代器1:

void test_iterator_1()
{
    int z = 0;
    int nv = 1200000000;
    std::vector<int> v(nv);

    size_t count = v.size();

    for (unsigned int i = 0; i < count; ++i) {
        v[i] = 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

测试迭代器2:

void test_iterator_2()
{
    int z = 0;
    int nv = 1200000000;
    std::vector<int> v(nv);

    for (int& i : v) {
        i = 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:问题仍然是相同的,但对于-O3中的ranged-for,差异很小.所以对于循环1是最好的.

更新2:结果:

使用-O3:

t1: 80 …
Run Code Online (Sandbox Code Playgroud)

c++ performance iterator c++11

-1
推荐指数
1
解决办法
151
查看次数

迭代Collection时删除元素

我读到在迭代Collection时删除元素的正确方法是这样的(使用迭代器):

List<Integer> list = new ArrayList<Integer>();
list.add(12);
list.add(18);

Iterator<Integer> itr = list.iterator();

while(itr.hasNext()) {
    itr.remove();
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到了Exception in thread "main" java.lang.IllegalStateException,我不知道为什么.有人能帮我吗?

java collections iterator

-1
推荐指数
1
解决办法
83
查看次数

迭代一个int和object的映射

我有一个名为SAR的类,它包含一个带有int键值的映射和我的SARdataPoint类型的对象数据值.SARdataPoint类型有一个函数int getDate(),我想为映射中包含的每个对象调用它.我无法绕过如何实现这一目标.我想我很亲密.

class SAR
{
public:
    // other attributes removed for compactness
    std::map<int, SARdataPoint> data;
}; // end of class SAR

void SAR::printSAR()
{
    for(auto iter = this->data.cbegin(); iter != this->data.cend(); ++iter)
    {
        std::cout << iter->getDate() << '\n'; //incorrect but close?
    }
}
Run Code Online (Sandbox Code Playgroud)

有关如何实现这一点的任何想法?

c++ iterator map

-1
推荐指数
1
解决办法
453
查看次数

Java Iterator作为一个类?

我被一些看似obvoius的东西所吸引,但这不适合我.我们有一个hashSet和Iterator:

Set<String> set = new HashSet<>();
Iterator it = set.iterator();
Run Code Online (Sandbox Code Playgroud)

我知道,迭代器是如何工作的,但对我来说有些奇怪:

Iterator*it = set.iterator();**
*ok,等等.Iterator是一个接口,而不是一个类.那么......?
**好吧,set是HashSet类的一个对象,它实现了接口Iterator,所以ith有一个void interator()imlemented,没什么不寻常的.

但是我们如何从Iterator接口创建Iterator对象?

java iterator

-1
推荐指数
2
解决办法
80
查看次数

如何使用Java维护Iterator

我有Iterator实例.我必须得到这个的大小.在这里,我得到了条目的大小.平均大小为8.假设我想在此迭代器中仅显示5个值.我该如何实现这一个?

Document<Feed> feeddoc = resp.getDocument();
List<Entry> entries = feeddoc.getRoot().getEntries();
entries = feeddoc.getRoot().getEntries();
Iterator<Entry> iterator = entries.iterator();
int size = entries.size();  //8

while (iterator.hasNext()) {

    /* here I am getting 8 values means iterating 8 times but I want to iterate only 5 times */
    Entry next = iterator.next();
    userDetailsVos = new UserDetailsVos();
    userDetailsVos.setTitle(next.getTitle());

    final IRI temp = next.getLinkResolvedHref("alternate");
    userDetailsVos.setUrl(temp.toString());
    userDetailsVos.setTime(next.getContentElement().getFirstChild().getElements().get(5).getText());

    System.out.println("(1)--" + next.getTitle());
    System.out.println("(2)--" + next.getContentElement().getFirstChild().getElements().get(5).getText());
    System.out.println("url: " + temp.toString());
}
Run Code Online (Sandbox Code Playgroud)

java iterator list

-1
推荐指数
1
解决办法
73
查看次数

通过双向链表向后迭代.C++

使用我当前的方法我得到一个运行时错误,"列出iter not derefrencable".for循环看起来像:

for (iter = the_list.end(); iter != the_list.begin(); iter--)
{
    if (assignment >= (*iter)){ // If the assignment being added is greater than assignment being pointed to in the list, add it after
                                // the assignment being pointed to
        if (!(assignment == (*iter))) // If the assignment being added is not a duplicate, add it
        {
            iter++; // Increment the iterator to add the assignment to place after the one it was compared to
            the_list.insert(iter, assignment); // Insert …
Run Code Online (Sandbox Code Playgroud)

c++ iterator doubly-linked-list

-1
推荐指数
1
解决办法
142
查看次数

如何遍历向量?

我需要严格按照元素被推回向量中的顺序进行迭代。对于我的特殊情况,最好使用迭代器,而不是像下面那样通过for-each循环进行迭代:

std::vector<int> vector;
for(int i = 0; i < vector.size(); i++)
   //not good, but works
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否真的可以像这样通过迭代器遍历向量:

std::vector<int> v;
for(typename std::vector<int>::iterator i = v.iterator(); i != v.end(); i++)
   //good, but I'm not strictly sure about the iterating order.
Run Code Online (Sandbox Code Playgroud)

因此,我可以根据需要安全地使用迭代器吗?它是标准的吗?

c++ iterator vector

-1
推荐指数
1
解决办法
6258
查看次数

如何迭代和删除Map <String,Map <String,Set <String >>>中的键

我有这样的地图,

Map<String, Map<String, Set<String>>> sampleMap = new Map<String, Map<String, Set<String>>>();
Run Code Online (Sandbox Code Playgroud)

这个地图中的数据就是这样的,

sampleMap={2014={A=[1, 2], B=[3], 2015={A=[1,2], B=[1,2], 2016={A=[1,2], B=[3,4]}};
Run Code Online (Sandbox Code Playgroud)

我想根据这个输入从地图中删除密钥:List<String> filter;这样的值,

filterArray : [2014, 2015]
Run Code Online (Sandbox Code Playgroud)

即,首先逐个遍历arraylist值,验证arraylist值是否与Hashmap中的任何键匹配.

  • 如果匹配密钥则忽略它.
  • 如果密钥不匹配,我只想从地图中删除该密钥.

即,我总是希望只保留地图中匹配的键,与传递的输入值进行比较.

在这种情况下,因为我有这样的arraylist值,[2014,2015],

2014,2015键只能在我的地图中.所以,

删除前的数据:

sampleMap={2014={A=[1, 2], B=[3], 2015={A=[1,2], B=[1,2], 2016={A=[1,2], B=[3,4]}};
Run Code Online (Sandbox Code Playgroud)

移动后的数据:

sampleMap={2014={A=[1, 2], B=[3], 2015={A=[1,2], B=[1,2]}};
Run Code Online (Sandbox Code Playgroud)

我试过这种方式,但我只是想知道这是正确的approch,还是容易出现任何异常?

Iterator<Map.Entry<String , Map<String, Set<String>>>> iter = sampleMap.entrySet().iterator();
while (iter.hasNext()) {
    Map.Entry<String , Map<String, Set<String>>> entry = iter.next();
    logger.info("Keys : " + entry.getKey());
    if (filterArray.equalsIgnoreCase(entry.getKey())) {
        iter.remove();
    }
}
Run Code Online (Sandbox Code Playgroud)

java collections iterator hashmap set

-1
推荐指数
1
解决办法
191
查看次数

Python iter()函数如何工作?

以下代码让我困惑:

>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> zip(*([iter(a)]*2))
[(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)]
>>> iter(a)
<listiterator object at 0x7f3e9920cf50>
>>> iter(a).next()
0
>>> iter(a).next()
0
>>> iter(a).next()
0
Run Code Online (Sandbox Code Playgroud)

next()总是返回0.那么,该iter功能如何工作?

python iterator

-1
推荐指数
1
解决办法
3089
查看次数

增强的for循环如何迭代原始类型?

我知道增强的for循环(因为java 1.5)可以用于迭代实现Iterator接口的类类型的集合.然而,它也可以用于迭代基本类型的数组,例如int,boolean,......所以我的逻辑结论是,由于自动装箱和拆箱,例如,原始整数被包装在它们的引用类型中,然后它们将被包含在内.轮到他们,实现Iteratable.

但是,当我查阅文档时java.lang.Integer,没有提到任何可以实现或扩展Iterable接口的超类或接口的扩展或实现.如果没有实现Iterable接口,增强的for循环如何知道如何循环原始类型?

java foreach iterator for-loop

-1
推荐指数
1
解决办法
317
查看次数