我想实现一个迭代器,但我不知道这个容器类型的元素的类型.我只知道我的容器类型是"Ring",而ring是一个Container-Type,具有proprety,在最后一个元素出现之后是第一个.
我不知道应该实现哪个Iterator,即:
class RingIterator implements Iterator<???>
private int pos = 0;
private List<?????> list;
RingIterator(List<? extends T> list) {
//code here
}
Run Code Online (Sandbox Code Playgroud)
什么应该进入"????" 空间?我认为在开头"Rind",但我认为这不是正确的答案..因为Ring应该包含其他类型的元素..我们只有一个关于"Ring"的信息:它是一个容器类型!(列表或类似的东西..)
谢谢你的帮助!
我遇到了这段代码,从给定的链表中删除了偶数长度的字符串我不明白为什么迭代器对象itr没有用new关键字实例化.这是代码..
public static void removeEvenLength(List<String> list) {
Iterator<String> itr= list.iterator();
while (itr.hasNext()) {
String element=itr.next();
if (element.length()%2==0) {
i.remove();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是否意味着迭代器方法是static,它只返回一个新iterable object的listas作为它field.有人可以提供一个或多个例子,其中我在Java中遇到类似的实例化方法而不是单例构造函数.谢谢
我需要以向后的顺序迭代一些元素,我正在使用:
for ( /* ... */ it = vec.end() - 1, end = vec.begin() ; it >= end ; --it ) {
// ...
Run Code Online (Sandbox Code Playgroud)
我现在end() - 1已经定义了一些容器,包括vector,但现在我需要知道是否还定义了开始递减.
我不知道是否可以使用reverse_iterator,因为我需要将这些迭代器作为参数传递给std :: vector :: erase,并且从文档中看,它们看起来是不同的类型.
我想迭代一个字典的子集来找到子集中的最小值.我可以使用生成器表达式来获取值:
>>> S = {'a', 'c'}
>>> D = {'a': 2, 'b': 0, 'c': 1, 'd': 3}
>>> min(D[k] for k in S)
1
Run Code Online (Sandbox Code Playgroud)
要获得相关的密钥,我想这是可能的:
>>> subset_min = min(D[k] for k in S)
>>> [k for k, v in D.iteritems() if v == subset_min]
['c']
Run Code Online (Sandbox Code Playgroud)
但肯定有一种方法不需要再次搜索字典?我希望像这里min(D, key=D.get)讨论的那样,但在这种情况下我无法看到如何应用它.
如果hasNext和Next像这样工作,这似乎是一个很好的方法:
boolean hasNextCalled = false;
boolean hasNext() {
hasNextCalled = true
}
next() {
assert hasNextCalled
}
Run Code Online (Sandbox Code Playgroud)
这样我们就不会在我们得到NoSuchElementException()的情况下登陆.hasNext()调用没有强制执行的任何实际原因?
在这段代码片段中,Update()返回一个布尔值,如果返回false,我想从向量中删除该元素.
但是,这会产生调试断言失败的运行时错误.表达式是"矢量迭代器不可递增".
代码:
for(auto iter = someVector.begin(); iter != someVector.end(); ++iter){
if(!iter->get()->Update()) iter = someVector.erase(iter);
}
Run Code Online (Sandbox Code Playgroud)
我试过从迭代器中减去如下:
for(auto iter = particles.begin(); iter != particles.end(); ++iter){
if(!iter->get()->Update()) iter = --(particles.erase(iter));
}
Run Code Online (Sandbox Code Playgroud)
...但这导致"矢量迭代器不可减少".
如何使我的代码按预期工作; 以便在Update()函数返回false时删除vector元素?
我正在尝试使用foreach从ArrayList中删除SubClass类型的项目,并在找到它时将其删除.
代码:
for (SuperClass item : list)
{
if (item instanceof SubClass)
{
list.remove(item);
}
}
Run Code Online (Sandbox Code Playgroud)
我真的不知道迭代器在这种情况下是如何工作的,但我要问的是:这样安全吗?或者它应该抛出一个超出范围的例外?
任何帮助表示赞赏!
考虑以下代码:
final String str = "1-2-3";
for (int idx = 0; idx < str.split("\\D").length; idx++) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
这部分代码str.split("\\D")会执行多少次?三次?或者编译器会看到str声明为final,只有一次调用str.split("\\D")就足够了吗?
在scala中,我们可以通过以下方式在元组上获得迭代器
val t = (1, 2)
val it = t.productIterator
Run Code Online (Sandbox Code Playgroud)
乃至
it.foreach( x => println(x.isInstanceOf[Int]) )
Run Code Online (Sandbox Code Playgroud)
返回true,因为不使用asInstanceOf [Int],我们无法对迭代器值执行简单的操作,因为
it.foreach( x => println(x+1) )
Run Code Online (Sandbox Code Playgroud)
返回错误:类型不匹配;找到:Int(1)必需:字符串
我了解Integer与Int的问题,但是isInstanceOf [Int]的有效性仍然有些令人困惑。
在元组上执行这些操作的最佳方法是什么?请注意,元组可以混合使用诸如整数和双精度之类的类型,因此转换为列表可能并不总是可行。
是否可以执行以下操作?
List<String> list = new ArrayList<String>();
Iterator<String> iterator = list.listIterator();
populateList(list);
Run Code Online (Sandbox Code Playgroud)
我在使用数据填充列表之前创建一个列表并获取其迭代器.我能使用迭代器获取列表的元素吗?获取迭代器和填充数组的顺序是否会有所不同?
任何帮助将不胜感激.
iterator ×10
java ×6
c++ ×2
arraylist ×1
collections ×1
containers ×1
dictionary ×1
for-loop ×1
generator ×1
generics ×1
instance ×1
list ×1
new-operator ×1
object ×1
portability ×1
python ×1
scala ×1
stl ×1
vector ×1