标签: iterator

这个(auto && elem:v)语法是简单的C++吗?我应该使用什么编译器来编译它?

我曾经在12年前使用C++编写代码,但由于我的工作原因,我把它留给了其他更简单的语言.

我想更新我的知识并尝试编译这里提出的解决方案,只是为了尝试这种迭代向量的新方法.但遇到编译错误:

expected initializer before ‘:’ token

我不知道有可能避免显式声明迭代器,就像C++使用它一样(auto && elem : v).C++它的版本是什么?

b.cpp

#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
#include <string>
#include <set>

int main()
{
  std::vector<std::pair<std::string, std::string>> v
  {   {"handgun", "bullets"},
      {"turret", "bullets"}};

  std::cout << "Initially: " << std::endl << std::endl;
  for (auto && elem : v)
    std::cout << elem.first << " " << elem.second << std::endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

汇编

$ cc b.cpp  -std=c++0x  -o myprog
Run Code Online (Sandbox Code Playgroud)

错误

b.cpp:在函数'int …

c++ iterator compilation set

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

为什么以下代码使用Iterator next()和remove()抛出ConcurrentModificationException?

我测试了接口的方法next()remove()方法Iterator.我得到以下异常:

线程"main"java.util.ConcurrentModificationException中的异常

这是我的代码:

import java.util.*;

public class ListTest {
    public static void main(String[] args) {
        Collection<Integer> list = new ArrayList<Integer>();
        Iterator<Integer> iterator = list.iterator();

        Collections.addAll(list, 1, 2, 3, 4, 5);
        if (iterator.hasNext()) {
            iterator.next();
            iterator.remove();
        }

        System.out.println(list);
    }
}
Run Code Online (Sandbox Code Playgroud)

java iterator

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

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

memset导致"矢量迭代器不兼容"错误

目前正在使用我的DirectX游戏并在常量缓冲区构造函数中使用memset(0)(或VS中的ZeroMemory宏)来使用零初始化所有值,并且它可以正常工作.当我不小心尝试以这种方式初始化包含向量的其他结构时出现问题.根据编译器(VS2010/VS2012),这会导致"矢量迭代器不兼容",std :: vector :: end更加精确.我可以理解memset可能会使向量迭代器无效,但是在我将元素推回到向量之后,为什么"结束"迭代器无法正常工作.它不应该重新定位向量将迭代器结束到正确的位置(在最后一个元素之后)?所有类型的std :: some_container :: end迭代器都受此影响了吗?

#include <vector>

class MyClass
{
public:
    MyClass() { 
        memset(this, 0, sizeof(*this));
    }
    ~MyClass() {}
    std::vector<int>& GetData() { return m_data; }
    float            m_range;
private:
    std::vector<int> m_data;

};

int main()
{
    MyClass myClass;
    myClass.GetData().push_back(1);
    myClass.GetData().push_back(2);

    for (auto it = myClass.GetData().begin(); it != myClass.GetData().end(); it++)     
    {
        //stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ iterator vector memset

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

*在C++中的目的是什么?

int main()
{
    string s("some string");
    if (s.begin() != s.end())
        auto it = s.begin();
    *it = toupper (*it) ; // Error ; the identifier "it" is undefined 
}
Run Code Online (Sandbox Code Playgroud)

为什么*它未定义?为什么我们需要在迭代器维度中使用dereference?

c++ iterator dereference

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

如何转换此迭代器阻止功能更改?

给出以下代码段:

public class Foo
{
    public IEnumerable<string> Sequence { get; set; }
    public IEnumerable<string> Bar()
    {
        foreach (string s in Sequence)
            yield return s;
    }
}
Run Code Online (Sandbox Code Playgroud)

以下代码片段在语义上是等价的,还是不同?如果不同,它们的功能如何不同?

public class Foo2
{
    public IEnumerable<string> Sequence { get; set; }
    public IEnumerable<string> Bar2()
    {
        return Sequence;
    }
}
Run Code Online (Sandbox Code Playgroud)

这个问题的灵感来自于这个问题,它提出了一个类似情况的不同问题.

c# iterator yield-return deferred-execution

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