我试图删除一些元素ArrayList迭代它像这样:
for (String str : myArrayList) {
if (someCondition) {
myArrayList.remove(str);
}
}
Run Code Online (Sandbox Code Playgroud)
当然,我ConcurrentModificationException试图在迭代时同时从列表中删除项目时得到一个myArrayList.有没有一些简单的解决方案来解决这个问题?
我应该用吗?
std::sort(numbers.begin(), numbers.end(), std::greater<int>());
Run Code Online (Sandbox Code Playgroud)
要么
std::sort(numbers.rbegin(), numbers.rend()); // note: reverse iterators
Run Code Online (Sandbox Code Playgroud)
按降序对矢量进行排序?一种方法或另一种方法有任何好处或缺点吗?
我创建了一个集合,我想提供一个STL风格的随机访问迭代器.我正在寻找迭代器的示例实现,但我没有找到任何.我知道需要const重载[]和*运算符.迭代器有什么要求是"STL风格",还有哪些其他缺陷需要避免(如果有的话)?
附加上下文:这是一个库,除非我真的需要,否则我不想引入任何依赖.我编写自己的集合,以便能够使用相同的编译器在C++ 03和C++ 11之间提供二进制兼容性(因此没有STL可能会破坏).
我想从符合条件的列表中获取第一项.重要的是,生成的方法不会处理整个列表,这可能非常大.例如,以下功能就足够了:
def first(the_iterable, condition = lambda x: True):
for i in the_iterable:
if condition(i):
return i
Run Code Online (Sandbox Code Playgroud)
这个函数可以用这样的东西:
>>> first(range(10))
0
>>> first(range(10), lambda i: i > 3)
4
Run Code Online (Sandbox Code Playgroud)
但是,我想不出一个好的内置/单线来让我这样做.如果我不需要,我不特别想复制这个功能.是否有内置方法可以使第一个项目符合条件?
考虑到Iterator<Element>,我们怎么可以转换Iterator到ArrayList<Element>(或List<Element>)的最好,最快的可能方式,这样我们就可以使用ArrayList它,例如的操作get(index),add(element)等等.
请使用以下两行代码:
for (int i = 0; i < some_vector.size(); i++)
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
for (some_iterator = some_vector.begin(); some_iterator != some_vector.end();
some_iterator++)
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
我被告知第二种方式是首选.这究竟是为什么?
我有一个自定义容器类,我想写它iterator和const_iterator类.
我之前从未这样做过,但我找不到合适的方法.关于迭代器创建的指导原则是什么,我应该注意什么?
我也想避免代码重复(我觉得const_iterator并iterator分享很多东西;应该是另一个子类吗?).
脚注:我很确定Boost有什么可以缓解的,但我不能在这里使用它,因为很多愚蠢的原因.
我想在列表上有一个反向列表视图(以类似的方式List#sublist提供列表上的子列表视图).是否有一些提供此功能的功能?
我不想制作任何类型的列表副本,也不想修改列表.
如果我在这种情况下至少可以在列表上获得反向迭代器就足够了.
另外,我知道如何自己实现这一点.我只是问Java是否已经提供了这样的东西.
演示实施:
static <T> Iterable<T> iterableReverseList(final List<T> l) {
return new Iterable<T>() {
public Iterator<T> iterator() {
return new Iterator<T>() {
ListIterator<T> listIter = l.listIterator(l.size());
public boolean hasNext() { return listIter.hasPrevious(); }
public T next() { return listIter.previous(); }
public void remove() { listIter.remove(); }
};
}
};
}
Run Code Online (Sandbox Code Playgroud)
我刚刚发现某些List实现具有descendingIterator()我需要的功能.虽然没有一般的这样的实现List.这有点奇怪,因为我看到的实现已经LinkedList足够通用了List.
为什么标准定义end()为一个结束而不是实际结束?
所以,我编写了一堆代码,通过index []访问stl向量中的元素,但现在我只需要复制一个向量的块.它看起来像vector.insert(pos, first, last)我想要的功能......除了我只有第一个和最后一个作为整数.有没有什么好方法可以获得这些值的迭代器?