我想知道是否有可能从最后一个迭代到ArrayList中的第一个元素,如果是这样的话怎么样?原因是因为我需要删除添加到列表中的最后一个元素
在C++ 11中std::map,是否有一些有效的迭代器x使得++ x保证相等map::begin()?我想检测一下我刚刚调用的函数(我的)是否已经从函数前面走了一个迭代器.该函数将迭代器向后移动一个位置.
答案是否适用于图书馆的其他部分?
我有一个可变序列的迭代器,例如
foo = [1,2,3,4,5]
for bar in foo:
Run Code Online (Sandbox Code Playgroud)
有没有办法通过使用迭代器中包含的引用来写入foo中的元素?天真的任务:
bar = 42
Run Code Online (Sandbox Code Playgroud)
当然不起作用.是否可以使用"幕后"引用迭代器中的序列元素?
PS:使用索引的简单解决方案
for i in range(len(a)):
a[i] = 42
Run Code Online (Sandbox Code Playgroud)
不适用于我的情况,因为我无法公开容器名称.
package wrap;
import java.util.*;
public class ArrayListDemo {
public static void main(String [] args){
ArrayList<String> a=new ArrayList<String>();
a.add("B");
a.add("C");
a.add("D");
ListIterator<String> i=a.listIterator();
while(i.hasPrevious()){
System.out.println(i.previous());
}
}
}
Run Code Online (Sandbox Code Playgroud)
该程序适用于hasNext()和next()方法,但对于hasPrevious()和previous(),它显示如下消息::
<terminated> ArrayListDemo [Java Application] C:\Program Files (x86)\Java\jre7\bin\javaw.exe (28-Oct-2013 3:20:35 PM)
Run Code Online (Sandbox Code Playgroud) 我有一个实现cbegin()和cend()功能的自定义容器类.然后我在foreach循环中使用它,但它似乎需要begin()和end()成员函数,即使我尝试使用const修饰符:
for (const auto val: container)
Run Code Online (Sandbox Code Playgroud)
和这样:
for (auto const val: container)
Run Code Online (Sandbox Code Playgroud)
和这样:
for (const auto const val: container)
Run Code Online (Sandbox Code Playgroud)
是否有可能强迫foreach使用常数c函数?
我执行与代理迭代器/引用类型的容器类似,以std::vector<bool>和冲突到了以下问题,我着手进行例举std::vector<bool>(这个问题不是std::vector<bool>!):
#include <vector>
#include <type_traits>
int main() {
using namespace std;
vector<bool> vec = {true, false, true, false};
auto value = vec[2]; // expect: "vector<bool>::value_type"
const auto& reference = vec[2]; // expect: "vector<bool>::const_reference"
static_assert(is_same<decltype(value), vector<bool>::value_type>::value,
"fails: type is vector<bool>::reference!");
static_assert(is_same<decltype(reference),
vector<bool>::const_reference>::value,
"fails: type is const vector<bool>::reference&!");
/// Consequence:
auto other_value = value;
other_value = false;
assert(vec[2] == true && "fails: assignment modified the vector");
Run Code Online (Sandbox Code Playgroud)
有没有办法实现代理类型,以便静态断言传递?
在实现这样的容器时,是否有关于如何处理此问题的指导原则?
也许通过使用转换运算符来auto/ auto&/ auto&& …
我不想压制警告.还有另一种处理此警告的方法吗?
"Iterator类型的表达式需要未经检查的转换以符合Iterator"
Iterator<String> it = schemaJSON.getJSONObject("body").keys();
Run Code Online (Sandbox Code Playgroud) 我有以下ArrayList ...
ArrayList<ArrayList<Integer>> row1 = new ArrayList<ArrayList<Integer>>();
Run Code Online (Sandbox Code Playgroud)
添加了以下arraylists ....
row1.add(cell1);
row1.add(cell2);
row1.add(cell3);
row1.add(cell4);
row1.add(totalStockCell);
Run Code Online (Sandbox Code Playgroud)
我想遍历arraylist row1并打印内容.
循环中的循环会在这里工作吗?
例如
while(it.hasNext()) {
//loop on entire list of arraylists
while(it2.hasNext) {
//each cell print values in list
} }
Run Code Online (Sandbox Code Playgroud) 我似乎无法找到关于迭代器是否保持它们迭代的底层对象的大量信息.
如果我创建一个迭代器,那么提供它的对象超出了范围,迭代器的存在是否会阻止它被破坏?
这是一个非常简单的例子,仅用于说明该场景:
// This class takes a copy of iterators to use them later
class Data {
public:
Data(std::vector<int>::iterator start, std::vector<int>::iterator end)
: start(start),
end(end)
{}
void show() {
// Use this->start and this->end for some purpose
}
private:
std::vector<int>::iterator start;
std::vector<int>::iterator end;
};
Data test() {
std::vector<int> v{1, 2, 3};
Data d(v.begin(), v.end());
d.show(); // this would be ok
return d;
}
int main(void) {
Data d = test();
d.show(); // What happens here?
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,Data对象正在存储迭代器的副本,这对第一次 …
是否obj == iter(obj)意味着obj不能重复迭代,反之亦然?我没有在文档中看到任何这样的措辞,但根据这个评论,标准库通过测试检查对象是否可重复迭代 :if iter(obj) is obj
@agf:Python标准库的某些部分依赖于规范的这一部分; 它们通过测试检测某些东西是否是迭代器/生成器
if iter(obj) is obj:,因为真正的迭代器/生成器对象将__iter__定义为标识函数.如果测试为真,则转换为list允许重复迭代,否则,假设对象可重复迭代,并且可以按原样使用它.
- ShadowRanger 6月3日17:23
文档确实声明如果obj是迭代器,则需要iter(obj)返回obj.但我认为这并不足以得出结论,可以使用非重复可迭代对象来识别iter(obj) is obj.
iterator ×10
c++ ×4
java ×4
c++11 ×3
python ×2
reference ×2
android ×1
arraylist ×1
c++14 ×1
containers ×1
iteration ×1
json ×1
listiterator ×1
python-3.x ×1
stl ×1