标签: iterator

重命名地图迭代器的第一个和第二个

有没有办法重命名map迭代器的第一个和第二个访问器函数.我知道他们有这些名称是因为代表键和值的底层对,但我希望迭代器更具可读性.我认为这可能是使用迭代器适配器,但我不知道如何实现它.

请注意,我不能使用提升.

我的意思是:

map<Vertex, Edge> adjacency_list;
for(map<Vertex, Edge>::iterator it = adjacency_list.begin();
    it != adjacency_list.end();
    ++it)
{
    Vertex v = it->first;
    //instead I would like to have it->vertex
}
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl map

19
推荐指数
5
解决办法
8920
查看次数

如何使用std :: copy将一个地图复制到另一个地图?

我想将一个std :: map的内容复制到另一个.我可以用std::copy它吗?显然,以下代码不起作用:

int main() {
  typedef std::map<int,double> Map;
  Map m1;
  m1[3] = 0.3;
  m1[5] = 0.5;
  Map m2;
  m2[1] = 0.1;
  std::copy(m1.begin(), m1.end(), m2.begin());
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这不会因为工作copy会叫operator*m2.begin()为"解引用",并分配一个值(所有值的类型的std::pair<const int, double>).然后它将调用operator++移动到下一个空间m2.这两个操作都因为constin const int而无法工作,并且没有为任何新元素保留空间.

有没有办法让它适用std::copy

谢谢!

c++ iterator stl copy map

19
推荐指数
2
解决办法
4万
查看次数

Javascript从对象"弹出"

我编写了以下代码来从对象"弹出"一个属性,就像它是一个数组一样.这看起来像是会让我被更严肃的程序员打耳光的那种代码,所以我想知道这样做的正确方法是什么:

// wrong way to pop:
for( key in profiles ){
    var profile = profiles[key];  // get first property
    profiles[key] = 0;            // Save over property just in case "delete" actually deletes the property contents instead of just removing it from the object
    delete profiles[key];         // remove the property from the object
    break;                        // "break" because this is a loop
}
Run Code Online (Sandbox Code Playgroud)

我应该在上面提到过,与真正的"pop"不同,我不需要以任何特定的顺序出现这些对象.我只需要取出一个并将其从父对象中删除.

javascript iterator object

19
推荐指数
3
解决办法
4万
查看次数

const_iterator的C++迭代器

如何const_iteratoriteratorC++中获取a ?怎么样一个const_iteratorinsert_iterator?结果iterator应该指向与原始位置相同的位置.

c++ iterator stl

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

如果Set包含具有某些字符串值的对象,如何检入java?

我有一组对象.每个对象都有String值.

我需要选择所有this值等于"方向"的对象.

是否可以不迭代集合?

谢谢.

java string iterator map set

19
推荐指数
3
解决办法
7万
查看次数

C++ 11:在迭代时从std :: unordered_map中删除单个元素是否安全?

考虑在迭代时从关联容器中删除元素的规范算法:

for (auto iter = myMap.begin(); iter != myMap.end(); )
{
    if (/* removal condition */)
    {
        iter = myMap.erase(iter);
    }
    else
    {
        ++iter;
    }
}
Run Code Online (Sandbox Code Playgroud)

在使用C++ 11 std::unordered_map容器时,我一直在不加思索地应用这个算法.但是,在浏览cppreference.comstd::unordered_map::erase上的文档之后,在阅读以下注释后我变得有点担心:

保留未擦除元素的顺序(这使得可以在迭代容器时擦除单个元素)(从C++ 14开始)

基于这个陈述,我假设在C++ 14标准中添加了语言,以确保库实现者在调用后保证排序std::unordered_map::erase.例如,这样的要求可能会限制实现在删除元素后不重新整理整个容器,而只是允许它从相应的存储桶中删除元素?

如果我在C++ 11中没有这样的保证,并且如果我希望我的代码是可移植的,那么如果我std::unordered_map在迭代期间删除一个元素,我是否必须担心一些元素会被访问多次或根本不访问?

c++ iterator stl unordered-map c++11

19
推荐指数
1
解决办法
1780
查看次数

Java8生成器的无限序列自然数

我用Java8 定义naturalStream自然数的无限序列()iterator.

IntStream natural = IntStream.iterate(0, i -> i + 1);

natural
 .limit(10)
 .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

现在,我想用Java8定义它generator.

静态流生成(供应商)

什么是最简单的方法?谢谢.

java iterator generator java-8

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

如何将迭代器复制到另一个迭代器?

我需要迭代for循环的每次迭代的值集,但只有第一次迭代才能正常工作.此后itr.hasNext()返回false.

Iterator<String> itr = getQuestionIterator(File file);

for(Person p : persons)
{
    while(itr.hasNext())
    {
        String question = itr.next();
        ........
        ........
    }
}
Run Code Online (Sandbox Code Playgroud)

这种行为对我来说很清楚.

一种解决方案可能是getQuestionIterator(File file)在for循环中调用方法,因此对于每个for循环迭代,它都会重新初始化.但这是非常低效的方法,因为它itr是独立的.

我尝试了这个Iterator<String> temp = itr,但它也没有用,因为它仅保留了参考.

有没有办法将迭代器复制到另一个或任何其他更好的方法?

java iterator

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

在Map的entrySet中流与Iterator

据我了解,下面的代码应打印true,因为两者StreamIterator指向的第一个元素.

但是,当我运行以下代码时,它正在打印false:

final HashMap<String, String> map = new HashMap<>();
map.put("A", "B");
final Set<Map.Entry<String, String>> set = Collections.unmodifiableMap(map).entrySet();
Map.Entry<String, String> entry1 = set.iterator().next();
Map.Entry<String, String> entry2 = set.stream().findFirst().get();
System.out.println(entry1 == entry2);
Run Code Online (Sandbox Code Playgroud)

不同行为的原因是什么?

java iterator java-8 java-stream entryset

19
推荐指数
2
解决办法
1686
查看次数

通过ruby数组迭代迭代

我如何迭代ruby数组并始终获得两个值,当前和下一个,如:

[1,2,3,4,5,6].pairwise do |a,b|
  # a=1, b=2 in first iteration
  # a=2, b=3 in second iteration
  # a=3, b=4 in third iteration
  # ...
  # a=5, b=6 in last iteration
end
Run Code Online (Sandbox Code Playgroud)

我的用例:我想测试数组是否已排序,并且通过使用这样的迭代器,我总能比较两个值.

我不是each_slice在这个问题中寻找:将ruby数组转换为连续对的数组

ruby arrays iterator

18
推荐指数
1
解决办法
4584
查看次数

标签 统计

iterator ×10

c++ ×4

java ×4

stl ×4

map ×3

java-8 ×2

arrays ×1

c++11 ×1

copy ×1

entryset ×1

generator ×1

java-stream ×1

javascript ×1

object ×1

ruby ×1

set ×1

string ×1

unordered-map ×1