标签: iterator

从后到前填充矢量的最有效方法

我试图用一系列值填充向量.为了计算第一个值,我需要计算第二个值,这取决于第三个值等.

let mut bxs = Vec::with_capacity(n);

for x in info {
    let b = match bxs.last() {
        Some(bx) => union(&bx, &x.bbox),
        None => x.bbox.clone(),
    };
    bxs.push(b);
}
bxs.reverse();
Run Code Online (Sandbox Code Playgroud)

目前我只是使用前后填充向量v.push(x),然后使用反向向量v.reverse().有没有办法在一次通过中做到这一点?

iterator vector rust

6
推荐指数
2
解决办法
740
查看次数

迭代Arraylist <String []>

我有一个ArrayList完整的String数组,我无法弄清楚如何循环.迭代器对我来说是新的,即使我过去使用它们,我也不知道该怎么做.

Iterator<String[]> iterator = list.iterator();
                while (iterator.hasNext()) {
                    String trip = "Till: " + iterator.next(0) + " | Från: " + list.get(4) + " | Kostar: " + list.get(1) +"kr | Avgår: " + list.get(2) + " | Ankomst Tid: " + list.get(3) + " | Antal bokningar: " + list.get(4);
Run Code Online (Sandbox Code Playgroud)

这是我正在做的一些实验.我虽然iterator.next()会在当前行返回StringArray,所以我尝试了例如iterator.next(0).据我所知list.get(x)只给我一行.

在上面的代码中,我希望每个行String Array都在某个索引处.像这样的东西:

for each row
 system.out.println(String[2] +String[5]);
Run Code Online (Sandbox Code Playgroud)

java arrays iterator arraylist

6
推荐指数
1
解决办法
2万
查看次数

通过变量名迭代struct

更新:6个月后,我刚刚遇到了这样的答案:索引结构是否合法?:Slava回答.我认为这是一个比这里提供的更好的解决方案,因为绝对没有未定义的行为.希望这对下一个人有所帮助,因为对我来说已经太晚了.


在您发表评论告诉我使用数组或向量或任何形式的容器之前,这是一个我不能做的事实.我知道,这将通过数组来解决,否则任何解决方案都非常"hacky".我很想用一个容器,但我绝对不能.

我是一家非常大的公司的中级开发人员,我们正在使用公司范围的库来通过以太网发送数据.有多种原因可以解释为什么它不能支持数组/向量,而是使用POD结构(普通旧数据 - 字符,浮点数,整数,粗体).我从一个浮点数开始,我必须使用它来填充具有相同浮点数的结构.由于这个库的目的是通过以太网发送消息,我只需要进行两次迭代 - 一次在发送上,一次在接收上.所有其他时间,此数据存储为数组.我知道 - 我应该将数组序列化并按原样发送,但我再说一遍 - 我绝对不能.

我有一个float[1024],必须遍历数组并填充以下结构:

struct pseudovector
{
    float data1;
    float data2;
    float data3;
    ...
    float data1024;
}
Run Code Online (Sandbox Code Playgroud)

我已经使用BOOST_PP_REPEATBOOST_PP_SEQ_FOR_EACH_I生成了这个结构,这样我就不必写出所有1024个浮点数,并且它增加了可维护性/可扩展性.

以同样的方式,我尝试通过预编译器##连接(/sf/answers/2031466041/)迭代结构,但由于这是在预编译时完成的,因此不能用于运行 - 获取/设置时间.

我已经研究过如何实现反射,例如如何向C++应用程序添加反射?Ponder Library,但这两种方法都要求您明确写出可以反映的每个项目.在这种情况下,我不妨std::map<string, float>通过字符串/整数连接在for循环中创建并迭代:

for(i=0;i<1024;i++)
{
    array[i] = map.get(std::string("data")+(i+1))
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以推荐一个更清洁的解决方案,不需要我写出超过1024行代码?非常感谢您的帮助!

我再说一遍 - 我绝对不能使用任何类型的数组/向量.

c++ iteration reflection iterator c-preprocessor

6
推荐指数
1
解决办法
1186
查看次数

是否允许增加结束迭代器?

是否允许增加it已经存在的迭代器变量end(),即auto it = v.end()

  • 它一般是允许的吗?
  • 如果没有,是不允许的vector
  • 如果是的话,则++it可能幂等如果it==v.end()

我问,因为我偶然发现了这样的代码:

std::vector<int> v{ 1, 2, 3, 4, 5, 6, 7 };
// delete every other element
for(auto it=v.begin(); it<v.end(); ++it) { // it<end ok? ++it ok on end?
  it = v.erase(it);
}
Run Code Online (Sandbox Code Playgroud)

它适用于g ++ - 6,但这不是证据.

对于一个人it<v.end()可能只能使用vectors,我想它应该it!=v.end()一般阅读.但是在这个示例中,当它已经结束时,将无法识别vif ++it的结尾.

c++ iterator

6
推荐指数
1
解决办法
3711
查看次数

生成器和迭代器中的__next__以及什么是方法包装器?

我正在阅读关于生成器和迭代器以及它的作用__next__().

'__next__' in dir(mygen).是真的

'__next__' in dir(mylist),是假的

当我深入研究它时,

'__next__' in dir (mylist.__iter__()) 是真的

  1. 为什么__next__只适用于列表中,但只有__iter__()mygen,但不会mylist.当我们使用list-comprehension踩到列表时,如何__iter__()调用__next__

    我打电话试图手动步进(+1)发电机mygen.__next__().它不存在.它只存在于mygen.__next__被称为method-wrapper的地方.

  2. 什么是方法包装器,它做什么?它是如何应用的:inmygen() and __iter__() ?

  3. 如果__next__是生成器和迭代器提供的(以及它们的唯一属性)那么生成器和迭代器之间有什么区别?*

    答案3:解决,如mod /编辑所述:

    Python的生成器和迭代器之间的区别

更新:生成器和迭代器都有__next__().我的错.看着日志,某种程度上mygen.__next__()测试给了我停止异常错误.但我无法再次复制该错误.

谢谢大家回答!

python iterator generator wrapper python-3.x

6
推荐指数
2
解决办法
1万
查看次数

为什么带有.chars()的.flat_map()不能与std :: io :: Lines一起使用,而是使用字符串向量?

我试图迭代stdin中的字符.该Read.chars()方法实现了这一目标,但不稳定.显而易见的替代方法是使用Read.lines()a flat_map将其转换为字符迭代器.

这似乎应该有效,但不会,导致borrowed value does not live long enough错误.

use std::io::BufRead;

fn main() {
    let stdin = std::io::stdin();
    let mut lines = stdin.lock().lines();
    let mut chars = lines.flat_map(|x| x.unwrap().chars());
}
Run Code Online (Sandbox Code Playgroud)

在Rust中的逐字符读取文件中提到,但它并没有真正解释原因.

我特别困惑的是它与文档中flat_map的示例有何不同,后者用于flat_map应用于.chars()字符串向量.我真的不明白这应该有什么不同.我看到的主要区别是我的代码也需要调用unwrap(),但是将最后一行更改为以下代码也不起作用:

let mut chars = lines.map(|x| x.unwrap());
let mut chars = chars.flat_map(|x| x.chars());
Run Code Online (Sandbox Code Playgroud)

它在第二行失败,所以问题似乎不是unwrap.

为什么最后一行不起作用,当文档中非常相似的行没有?有没有办法让这个工作?

iterator rust

6
推荐指数
1
解决办法
207
查看次数

检查模板参数是否是std :: vector <T> :: iterator

如何检查模板参数是否是std::vector<T>::iterator

对于void类型,我们有std :: is_void.有这样的东西std::vector<T>::iterator吗?

c++ templates iterator vector

6
推荐指数
1
解决办法
731
查看次数

排列值顺序的迭代器

我有一个简单的排列结构:

struct Permutation
{
   vector<string> items; // ["val_0", "val_1", "val_2", "val_3", "val_4"]
   vector<short> permutationValue;  // Let's say value is [4, 2, 0, 1, 3]
}
Run Code Online (Sandbox Code Playgroud)

我希望能够在范围循环中使用它,就像那样

for(string item: permutation){
{ 
    cout << item << endl;
}
Run Code Online (Sandbox Code Playgroud)

最终预期产量应为:

val_4
val_2
val_0
val_1
val_3
Run Code Online (Sandbox Code Playgroud)

我应该在Permutation课堂上实施哪些方法来实现它?

c++ iterator permutation c++11

6
推荐指数
2
解决办法
179
查看次数

使用指针作为容器迭代器违反标准

Angew评论vector使用原始指针作为迭代器类型很好.那种情绪让我陷入了困境.

我开始研究它,发现对vector迭代器的要求只是它们是"随机访问迭代器",它明确指出指针符合条件:

指向数组元素的指针满足所有要求

是编译器甚至vector为调试目的提供迭代器的唯一原因,还是实际上我错过了一个要求vector

c++ pointers iterator vector random-access

6
推荐指数
1
解决办法
198
查看次数

c ++中的优先级队列

有没有办法在c ++中迭代优先级队列?我的理解是它们或多或少是不可变的,容器的唯一操作是顶层元素.我希望能够打印出优先级队列的内容,但不确定如何解决问题.

c++ iterator priority-queue

6
推荐指数
1
解决办法
2134
查看次数