我试图找出确定我是否在地图循环的最后一次迭代中的最佳方法,以便执行以下操作:
for (iter = someMap.begin(); iter != someMap.end(); ++iter) {
bool last_iteration;
// do something for all iterations
if (!last_iteration) {
// do something for all but the last iteration
}
}
Run Code Online (Sandbox Code Playgroud)
似乎有几种方法可以做到这一点:随机访问迭代器,distance函数等.规范方法是什么?
编辑:没有地图的随机访问迭代器!
我看过使用Python的csv.reader的唯一方法是在for循环中,它遍历整个文件而不保存读取变量的过去值.我只需要一次处理(巨大的)文件的2个连续行.使用csv.reader for循环,我一次只有1行.
有没有办法使用Python的csv模块只接收一行csv文件而不必完成文件的读取?
我需要将变量设置为第一行中的值,将第二组变量设置为下一行的值,同时使用两组变量进行计算,然后使用第二组覆盖第一组变量,并且读取新行以覆盖第二组.
假设我有这个:
public class Unit<MobileSuit, Pilot> {
...
List<MobileSuit> mobileSuits;
List<Pilot> pilots;
...
}
Run Code Online (Sandbox Code Playgroud)
我想以最简单的方式在该类之外迭代这对中的每一对.我应该怎么做呢?我想过这样做:
public class Unit<MobileSuit, Pilot> {
...
Iterator<MobileSuit> iteratinMechas;
Iterator<Pilot> iteratinPeople;
class IteratorCustom<MobileSuit, Pilot> implements Iterator {
public boolean hasNext() {
return iteratinMechas.hasNext() && iteratinPeople.hasNext();
}
public void remove() {
iteratinMechas.remove();
iteratinPeople.remove();
}
public Object next() {
// /!\
}
}
public Iterator iterator() {
return new IteratorCustom<MobileSuit, Pilot>(mobileSuits, pilots);
}
}
Run Code Online (Sandbox Code Playgroud)
沿着那条线的东西.
无论如何,问题是我不能真正从next()返回一个对象,而且我也不能让Iterator占用多个类型.那么,有什么想法吗?
另外,我不能组建一个新的课程来结合MobileSuit和Pilot.我需要将它们分开,即使我一次迭代它们.原因是可能有没有飞行员的移动套装,我不知道如何通过将它们保持在同一级别来解决这个问题.这个类需要在其他地方进行处理,所以我必须统一一个接口和其他很多东西.基本上,假设MobileSuit和Pilot需要分开.
我试图在TreeSet中实现一个搜索方法.通过使用带有condtional的迭代器,我希望能够遍历集合并打印匹配条件的对象.然而,我现在这样做的方式是打印出后续对象而不是当前对象.这是我到目前为止:
public void getDetails() {
Iterator<Person> it = this.getPersonSet().iterator();
System.out.println("Enter First Name");
String first = in.next().toLowerCase();
System.out.println("Enter Second Name");
String last = in.next().toLowerCase();
while (it.hasNext()) {
if (it.next().getLast().toLowerCase().equals(last)) {
Person p = it.next();
System.out.println(p);
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很棒
如何在不从容器中取得所有权的情况下访问容器的unique_ptr元素(通过迭代器)?当一个人获得容器中元素的迭代器时,元素所有权仍然与容器有关吗?当一个解引用迭代器来获取对unique_ptr的访问权限时怎么样?这是否执行unique_ptr的隐式移动?
当我需要将元素存储在容器中(而不是通过值)时,我发现我正在使用shared_ptr,即使容器在概念上拥有元素而其他代码只是希望操纵容器中的元素,因为我害怕无法实际访问容器中的unique_ptr元素而不从中获取所有权.
任何见解?
让我们a=109或1101101二进制.如何迭代此数字的位,例如:[64, 32, 8, 4, 1]
我正在尝试导入CSV文件,使用表单从客户端系统上传文件.收到文件后,我将采取部分内容并在我的应用中填充模型.但是,当我继续迭代上传文件中的行时,我得到一个"迭代器应该返回字符串,而不是字节"错误.我花了好几个小时尝试不同的东西并阅读我能找到的所有东西,但似乎无法解决它(注意,我对Django来说相对较新 - 运行1.5-和python - 运行3.3).我删除了一些事情来解决错误并像这样运行以确保它仍然存在.在tools_clubs_import()中执行"club_list中的俱乐部"行时显示错误:
以下是根据下面标记的答案修正后的views.py:
import csv
from io import TextIOWrapper
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from rank.forms import ClubImportForm
def tools_clubs_import(request):
if request.method == 'POST':
form = ClubImportForm(request.POST, request.FILES)
if form.is_valid():
# the following 4 lines dumps request.META to a local file
# I saw a lot of questions about this so thought I'd post it too
log = open("/home/joel/meta.txt", "w")
for k, v in request.META.items():
print ("%s: %s\n" % (k, …Run Code Online (Sandbox Code Playgroud) 我有这个代码
#include <vector>
#include <iostream>
int main(int argc, char* argv[])
{
std::vector<int> v1,v2;
std::cout << std::distance(v1.begin(),v2.begin());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它有一个bug,因为比较两个不同向量的迭代器没有意义.
我看了一下N3376在24.4.4迭代器操作在815页:
Run Code Online (Sandbox Code Playgroud)template<class InputIterator> typename iterator_traits<InputIterator>::difference_type distance(InputIterator first, InputIterator last);要求:如果
InputIterator符合随机访问迭代器的要求,last应可以从first或first到达last; 否则,last应该可以从first.
现在我认为需求没有实现.
在这种情况下,标准状态应该发生什么?
C++ 17引入了ContiguousIterator的概念http://en.cppreference.com/w/cpp/iterator.然而,似乎没有计划contiguous_iterator_tag(通过我们现在以同样的方式random_access_iterator_tag)报告std::iterator_traits<It>::iterator_category.
为什么contiguous_iterator_tag失踪?
是否有传统的协议来确定迭代器是否是连续的?还是编译时间测试?
在过去我提到过,对于容器,如果有一个.data()成员转换为指向::value类型的指针,并且有.size()成员可转换为指针差异,那么应该假设容器是连续的,但我不能提取迭代器的类似特征.
一种解决方案可能是data为连续迭代器提供一个函数.
当然,连续概念&(it[n]) == (&(*it)) + n在所有情况下都有效n,但在编译时无法检查.
编辑:我发现这个视频把它放在更广泛的C++概念上下文中.CppCon 2016:"在现代多核世界中构建和扩展迭代器层次结构",作者:Patrick Niedzielski.解决方案使用概念(Lite),但最后的想法是连续的迭代器应该实现一个pointer_from函数(与我的data(...)函数相同).
结论是概念将有助于形式化理论,但它们并不神奇,在某种意义上,某个人会在某个地方定义新的特别命名的函数而不是连续的迭代器.这个讨论概括了分段迭代器(带有相应的函数segment和local),不幸的是它没有说明跨步指针.