C++ 11提供了多种迭代容器的方法.例如:
for(auto c : container) fun(c)
Run Code Online (Sandbox Code Playgroud)
for_each(container.begin(),container.end(),fun)
Run Code Online (Sandbox Code Playgroud)
但是,建议的方法是迭代两个(或更多)相同大小的容器来完成以下操作:
for(unsigned i = 0; i < containerA.size(); ++i) {
containerA[i] = containerB[i];
}
Run Code Online (Sandbox Code Playgroud) Java中有两种类型的迭代器:故障安全和故障快速.
这是什么意思,它们之间的区别是什么?
目标是访问字符串向量的"第n"元素,而不是[]运算符或"at"方法.根据我的理解,迭代器可用于浏览容器,但我以前从未使用过迭代器,而我正在阅读的内容令人困惑.
如果有人能给我一些如何实现这一目标的信息,我将不胜感激.谢谢.
我正在尝试迭代打字稿地图,但我一直收到错误,我找不到任何解决方案,因为这样一个微不足道的问题.
我的代码是:
myMap : Map<string, boolean>;
for(let key of myMap.keys()) {
console.log(key);
}
Run Code Online (Sandbox Code Playgroud)
我得到错误:
类型'IterableIteratorShim <[string,boolean]>'不是数组类型或字符串类型.
完整堆栈跟踪:
错误:Typescript发现以下错误:/home/project/tmp/broccoli_type_script_compiler-input_base_path-q4GtzHgb.tmp/0/src/app/project/project-data.service.ts(21,20):输入'IterableIteratorShim <[string ,boolean]>'不是数组类型或字符串类型.在BroccoliTypeScriptCompiler._doIncrementalBuild(/home/project/node_modules/angular-cli/lib/broccoli/broccoli-typescript.js:115:19)BroccoliTypeScriptCompiler.build(/ home/project/node_modules/angular-cli/lib/broccoli/broccoli-typescript.js:43:10)在/home/project/node_modules/broccoli-caching-writer/index.js:152:21在lib $ rsvp $$ internal $$ tryCatch(/ home/project/node_modules/rsvp) /dist/rsvp.js:1036:16)lib $ rsvp $$内部$$ invokeCallback(/home/project/node_modules/rsvp/dist/rsvp.js:1048:17)在lib $ rsvp $$ internal $$发布(/home/project/node_modules/rsvp/dist/rsvp.js:1019:11)在lib $ rsvp $ asap $$ flush(/home/project/node_modules/rsvp/dist/rsvp.js:1198:9) at_combinedTickCallback(internal/process/next_tick.js:67:7)at process._tickCallback(internal/process/next_tick.js:98:9)
我正在使用angular-cli beta5和typescript 1.8.10,我的目标是es5.有没有人有这个问题?
s = [1,2,3,4,5,6,7,8,9]
n = 3
zip(*[iter(s)]*n) # returns [(1,2,3),(4,5,6),(7,8,9)]
Run Code Online (Sandbox Code Playgroud)
zip(*[iter(s)]*n)工作怎么样?如果用更详细的代码编写它会是什么样子?
目前我这样做:
try:
something = iterator.next()
# ...
except StopIteration:
# ...
Run Code Online (Sandbox Code Playgroud)
但我想要一个表达式,我可以放在一个简单的if陈述中.是否有任何内置功能可以使这些代码看起来不那么笨拙?
any()False如果iterable为空,则返回,但如果不是,则可能会迭代所有项.我只需要它来检查第一项.
有人问我要做什么.我编写了一个执行SQL查询并生成结果的函数.有时当我调用此函数时,我只想知道查询是否返回任何内容并根据它做出决定.
如果我有一个包含的列表,[alice, bob, abigail, charlie]并且我想编写一个迭代器,以便迭代以'a'开头的元素,我可以编写自己的吗?我怎样才能做到这一点 ?
是否有一种"计算"快速的方法来获取迭代器的计数?
int i = 0;
for ( ; some_iterator.hasNext() ; ++i ) some_iterator.next();
Run Code Online (Sandbox Code Playgroud)
......似乎浪费了CPU周期.
我见过很多建议使用的问题:
for (var i = 0; i < myArray.length; i++){ /* ... */ }
Run Code Online (Sandbox Code Playgroud)
代替:
for (var i in myArray){ /* ... */ }
Run Code Online (Sandbox Code Playgroud)
对于数组,由于迭代不一致(参见此处).
但是,我似乎无法找到任何似乎更喜欢面向对象循环的东西:
myArray.forEach(function(item, index){ /* ... */ });
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎更直观.
对于我目前的项目,IE8的兼容性很重要,我正在考虑使用Mozilla的polyfill,但是我不能100%确定它是如何工作的.
iterator ×10
java ×4
c++ ×2
python ×2
arrays ×1
c++11 ×1
containers ×1
for-loop ×1
javascript ×1
maps ×1
terminology ×1
typescript ×1
vector ×1