标签: iterator

从列表中连续出现的值中仅选择一个值

我有一个这样的清单

l=[1,1,1,1,2,2,2,3,3,3,3,3,3,4,4,5,6,6,6,5,5,5,7,7,8,8,8,8,8,9,9,9,10,10]
Run Code Online (Sandbox Code Playgroud)

现在我只想连续选择一个重复值,所以输出应该是这样的,

l=[1,2,3,4,5,6,5,7,8,9,10]
Run Code Online (Sandbox Code Playgroud)

我可以使用 for 循环检查下一个值和前一个值并附加到列表中,但在这种情况下执行时间很长,寻找最有效的快捷方式。

python iterator list-comprehension list

0
推荐指数
1
解决办法
122
查看次数

“struct std::iterator_traits”中没有名为“value_type”的类型

我正在尝试实现一个简单的 ostream_itreator,它流式传输每个第 N 个元素,但我收到一个类型错误

error: no type named ‘value_type’ in ‘struct std::iterator_traits<outIterator<int> >’
       typedef typename iterator_traits<_OI>::value_type _ValueTypeO;
Run Code Online (Sandbox Code Playgroud)

代码:

#include <iostream>
#include <vector>
#include <iterator>


template<class T>
class outIterator {
    std::ostream *stream;
    size_t N;
    const char* delim;
    size_t counter = 0;
public:
    // initialization
    outIterator(std::ostream& out)
    : stream(&out)
    , N(1)
    , delim(" ")
    {}

    outIterator(std::ostream& out, size_t N, const char* delimiter)
    : stream(&out)
    , N(N)
    , delim(delimiter)
    {}

    // =
    outIterator<T>& operator= (const T& value) {
        if (counter % N == …
Run Code Online (Sandbox Code Playgroud)

c++ iterator c++11

0
推荐指数
1
解决办法
1893
查看次数

Java:`iterator.remove` 抛出 IllegalStateException

我有一个iteratorinside thread,我正在尝试删除重复的记录。

 Runnable readingThread = new Runnable() {
        @Override
        public void run() {

            Iterator<Demand> iterator = null;
            for (iterator = demandListFromFile.iterator(); iterator.hasNext();) {
                Demand demand = iterator.next();

                /**
                 * Find and assign the Item ID
                 */
                if (itemListHashMap.containsValue(demand.getItem().getItemName())) {
                    demand.getItem().setIditem(itemListHashMapReversed.get(demand.getItem().getItemName()));

                } else {
                    unavailableItemsList.add(demand.getItem().getItemName());
                }


                /**
                 * Find and remove duplicate records
                 */
                for (Map.Entry<Date, String> entry : demandListHashMap.entries()) {

                    if (demand.getDueDate().equals(entry.getKey()) && demand.getItem().getItemName().equals(entry.getValue())) {

                        iterator.remove();
                    }

                }

            }

        }
Run Code Online (Sandbox Code Playgroud)

删除几个项目后,iterator.remove抛出以下异常

Exception in thread "Thread-0" …
Run Code Online (Sandbox Code Playgroud)

java iterator illegalstateexception

0
推荐指数
1
解决办法
458
查看次数

在 C++ 中遍历向量时遇到问题

我一直在尝试编写一个程序,在该程序中我为学生班级输入数据(使用(const string &first_name, const string &last_name, float gpa, int id),该程序可以显示哪些学生的 gpa 高于 1.00。我在迭代时遇到问题通过一个向量。这是给我带来麻烦的函数:

vector<Student> find_failing_students(vector<Student> &students) {
    vector<Student> failing_students;
    int endVar;
    vector<Student>::iterator it;
    std::vector<Student>::iterator &forwardmarch = &students.begin();

    while(forwardmarch != &students.end())
    {
        Student temp = Student(forwardmarch->first_, forwardmarch->last_, forwardmarch->gpa_, forwardmarch->id_);
        if(temp.getgpa(temp) < 1) {
                    failing_students.push_back(temp);
        forwardmarch++;
    }
Run Code Online (Sandbox Code Playgroud)

std::vector<Student>::iterator &forwardmarch = &students.begin();部分给了我以下错误:来自类型为 'std::vector::迭代器*' {又名'__gnu_cxx::__normal_iterator >*'}

while 循环while(forwardmarch != &students.end())还给了我以下错误: 'operator!=' 不匹配(操作数类型是 'std::vector::iterator' {aka '__gnu_cxx::__normal_iterator >'} 和 'std::vector::iterator *' {aka '__gnu_cxx::__normal_iterator >*'})

我尝试了很多东西,也尝试过使用更典型的 for 循环,比如

for(std::vector<T>::iterator it = v.begin(); it …
Run Code Online (Sandbox Code Playgroud)

c++ iterator vector

0
推荐指数
1
解决办法
64
查看次数

为什么 std::vector::iterator 不是连续迭代器?

按照cppref页面std::vector

iterator 传统随机访问迭代器

同样来自另一个cppref 页面

以下标准库类型是LegacyContiguousIterators

vector::iterator 对于 bool 以外的 value_type。

哪个是正确的?

c++ iterator type-traits c++-concepts c++20

0
推荐指数
1
解决办法
160
查看次数

如何列出连接字符串列表的所有可能方法

我想列出连接字符串列表的所有可能方法,例如:

输入:

strings = ['hat','bag','cab']
Run Code Online (Sandbox Code Playgroud)

输出:

concatenated = ['hatbag','hatcab','hatbagcab','hatcabbag','baghat','bagcab',
                'baghatcab','bagcabhat','cabhat','cabbag','cabhatbag','cabbaghat']
Run Code Online (Sandbox Code Playgroud)

我已经尝试对这个简单的 3 字符串列表使用 for 循环,但我不知道如何使用列表中的许多字符串来执行此操作。

有人可以帮忙吗?

python iterator for-loop list string-concatenation

0
推荐指数
1
解决办法
142
查看次数

为什么某些 STL 容器(堆栈、队列、优先级队列)不支持迭代器?

在所有类型的迭代器中,为什么没有支持stack,queuepriority_queueSTL 容器的模式?

#include <iostream>
#include <stack>
#include <algorithm>

int main(){

    std::stack<int> values;
    std::stack<int> valuesCopy;

    values.push(98);
    values.push(11);
    values.push(14);
    values.push(17);
    values.push(20);

    std::for_each( /* How can i manage this in a alternative way */,
                      [&](int value) mutable throw() -> void{ /* Process */ ;} );

    std::copy(/* Same for this */,std::back_inserter(valuesCopy));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl

0
推荐指数
1
解决办法
102
查看次数

Python如何制作可以是“for”或“while”的循环,取决于是否存在上限

我有一个用例,我需要重复一些代码块:

  • 有时我需要重复代码块有限次数
  • 有时我需要无限期地重复代码块。

我想知道,是否有一些 Python 内置方法可以:

  • 没有提供限制 --> 代码块通过类似while循环的方式重复
  • 提供的限制 --> 代码块通过类似for循环的方式重复

注意:我知道我可以使用if语句(取决于是否存在上限),并在 aforwhileloop之间切换。我试图不让代码块重复两次,或者它分解为另一个函数。


当前实施

我使用 Python 3.8.2编写了以下有缺陷的(见下文)for_while_hybrid.py

from typing import Iterator


def iter_for_while(num_yield: int = None) -> Iterator[int]:
    """Generate an incrementing counter.

     This enables one to make a for loop or a while loop, depending on args.

    Args:
        num_yield: Number of times to yield.
            If left as None, the generator makes a while loop
            If …
Run Code Online (Sandbox Code Playgroud)

python iterator loops for-loop while-loop

0
推荐指数
1
解决办法
62
查看次数

在创建和不创建模板的情况下递增迭代器

我正在编写一行非常简单的代码来显示地图容器的内容,但遇到了一个有趣的错误。如果我写:

    void DisplayMap(const map<int, string>&  myMap)
{
    for (const map<int, string>::const_iterator myIterator = myMap.begin(); 
         myIterator != myMap.end(); ++myIterator)
    {
        cout << myIterator->first << ": " << myIterator->second << endl;
    }   
}
Run Code Online (Sandbox Code Playgroud)

编译器反对我使用++myIterator,声称该函数没有“++”类型的重载运算符。但是,如果我将其设为模板:

template <typename T>
void DisplayMap(const T&  myMap)
{
    for (map<int, string>::const_iterator myIterator = myMap.begin(); myIterator != myMap.end(); ++myIterator)
    {
        cout << myIterator->first << ": " << myIterator->second << endl;    
    }
}
Run Code Online (Sandbox Code Playgroud)

那么就没有问题了。代码运行完美。我希望有人能解释为什么编译器在这里没有问题。据我了解,使函数成为模板类似于为变量类型调用 auto 。但是编译器到底在做什么呢?

谢谢你的时间。

c++ containers iterator stl increment

0
推荐指数
1
解决办法
42
查看次数

--list.begin() == list.end() 吗?

标准是否保证

--list.begin() == list.end()

总是成立并且它实际上是一个有效的操作?(list是 的一个实例std::list)。

至少 MSVC 2019 似乎就是这种情况。

例如,这在以下情况下会很有用:

for ( auto i = list.begin(); i != list.end(); ++i )
{
  ...
  list.erase(i--);
  ...
}
Run Code Online (Sandbox Code Playgroud)

,即在迭代时删除元素时,因为i可能是列表的开头。这也需要++list.end() == list.begin()持有;那个怎么样?

c++ iteration iterator stdlist language-lawyer

0
推荐指数
1
解决办法
279
查看次数