标签: iterator

如何逐个擦除STL双端的所有元素?

我正面临一个奇怪的问题,即在迭代它时擦除STL列表中的元素.我知道擦除元素会使迭代器无效.所以,要么

"testQueue.erase(it++);" 要么 "it = testQueue.erase(it);"

应该使用.

为了简化我的问题,我尝试在迭代列表时删除所有元素.但是,当使用前一种机制时,我会收到Segfault.

以下是完整代码供您参考.

#include <iostream>
#include <queue>
#include <string>

int main()
{
    std::string d1 = "d1";
    std::string d2 = "d2";
    std::string d3 = "d3";

    std::deque<std::string> testQueue;
    testQueue.push_back(d1);
    testQueue.push_back(d2);
    testQueue.push_back(d3);

    std::deque<std::string>::iterator it = testQueue.begin();
    for(; it!=testQueue.end(); ++it){
        std::cout << (*it) << std::endl;
    }

    std::cout << "========" << std::endl;

    it = testQueue.begin();
    while(it!=testQueue.end()){
        testQueue.erase(it++); // This causes Segfault
        //it = testQueue.erase(it); // This one works just fine.
    }
    std::cout << "========" << std::endl;
    std::cout << "========" …
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl

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

当一个字符串是""或一个向量没有元素时,`begin()`等于`end()`?

当std::string是""或载体没有任何元素,是begin()等于end()?

如果是这样,begin()/ 的价值是end()多少?

c++ string iterator

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

如何将2个char*数组直接映射到std :: map <std :: string,std :: string>

我有2个char数组,如"const char*arr1 [ArrSize] = {"Blah1","Wibble1","Shrug1"};".为了将它们放入向量中,我发现了一个很好的快速解决方案

void fillVecTest()
{
    const int ArrSize = 3;
    const char *arr1[ArrSize] = {"Blah1", "Wibble1", "Shrug1"};
    const char *arr2[ArrSize] = {"Blah2", "Wibble2", "Shrug2"};
    std::vector<std::string> vec1(arr1, arr1+ArrSize);
    std::vector<std::string> vec2(arr2, arr2+ArrSize);
    std::vector<std::string>::iterator l_It1Vec1;
    std::vector<std::string>::iterator l_It = vec1.end();
    l_It = find(vec1.begin(), vec1.end(), std::string("Blah1"));
    if(l_It != vec1.end())
    {
      size_t l_pos = l_It - vec1.begin();
      printf("found %s, pos=%u val: %s\n", l_It->c_str(),l_pos, vec2[l_pos].c_str());
    }
 }
Run Code Online (Sandbox Code Playgroud)

现在我认为也应该可以将两者直接放入地图中,因为arr1是关键,而arr2是值.我尝试了一些方法,但我没有成功.

void fillMapTest()
{
    const int ArrSize = 3;
    const char *arr1[ArrSize] = {"Blah1", "Wibble1", "Shrug1"};
    const …
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl map char

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

为什么Java必须抛出并发修改异常?

我想知道Java的迭代器.为什么它们被设计为抛出并发修改异常?在C++ STL中,您可以遍历容器并随意修改内容,但为什么不能在Java中执行此操作?

编辑:更正的问题.框架不正确.

c++ java iterator exception

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

使用ListIterator打印数组列表

我正在尝试使用ListIterator从ArrayList打印,我很确定我做错了因为它不起作用但我不知道如何解决它.所有抓住零件编号的线路都不起作用,不确定原因; P.总是赞赏任何帮助:).

package invoice;
import static java.lang.System.out;

import java.util.*;

public class InvoiceTest {


    public static void print(){

    }

    public static void main (String args[]) {

        Scanner imput = new Scanner (System.in);
        ArrayList lInvoice = new ArrayList() ;
        int counter = 0;
        int partCounter;

        out.println("Welcome to invoice storer 1.0!");
        out.println("To start please enter the number of items: ");
        partCounter = imput.nextInt();


        while (counter < partCounter){
            counter++;
            out.println("Please enter the part number:");   
            Invoice invoice1 = new Invoice(); //Makes invoice 1 use the …
Run Code Online (Sandbox Code Playgroud)

java iterator

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

使用std :: map :: iterator的postincrement的奇怪行为

据我所知,以下方案

#include <map>

int main()
{
    std::map<int,int> foo;
    std::map<int,int>::iterator start = foo.begin();
    while (start++ != foo.end())
        ;
}
Run Code Online (Sandbox Code Playgroud)

应该终止,但它使用libstdc ++ 4.7.2无限循环.此程序显示的行为是否正确,或者标准库中是否存在错误?在迭代器上运算符++(int)的操作属性是什么?

c++ iterator stl map

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

Iterator对矢量对,并使用std :: copy打印结果

我有以下向量:

std::vector<std::pair<int,std::string>> songs;

我想使用std :: copy将向量中的元素(比如说int)传递给ostream,类似于以下哪些方法不起作用:

std::copy(songs.begin(),songs.end(),std::ostream_iterator<int>(std::cout,""));

我知道我可以这样做:

for(auto it=songs.begin(); it!=songs.end(); ++it)
    {
      std::cout << (*it).first;
    }
Run Code Online (Sandbox Code Playgroud)

但我想知道在C++中是否有可能创建一个迭代器,它只指向该对中的一个元素,然后使用它来迭代并将元素复制到ostream或者如何使std :: copy上面工作?

c++ iterator c++11

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

每个之间的区别和下面的代码选择?红宝石

我仍然试图找出每个之间的差异,并在阅读文档后选择.

有人可以向我解释为什么每个和select都可以在下面的代码中替换?我不明白为什么选择使用然后代码编写器将它放在一个数组?另外,了解他们之间差异的好方法是什么.

def word_unscrambler(str, words)
  str_letters = str.split("").sort

  anagrams = []
  words.select do |word|
    word_letters = word.split("").sort
    anagrams << word if str_letters == word_letters
  end

  anagrams
end
Run Code Online (Sandbox Code Playgroud)

ruby iterator

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

Java:类型与泛型类的迭代器不匹配

我想为一个工作正常的类创建一个Iterator.我认为迭代器会尝试使用泛型类的TypeParameter进行迭代,但显然情况并非如此,因为Eclipse告诉我需要一个Object.

如果有人知道我做错了什么,我会非常高兴.

public class GenericClass<T extends OtherClass> implements Comparable, Iterable
{
    private ArrayList<T> list = new ArrayList<T>();
    [...]
    @Override
    public Iterator<T> iterator()
    {
    Iterator<T> iter = list .iterator();
    return iter;
}
    [...]
}



public class Main
{
public static void main(String[] args)
{
    GenericClass<InstanceOfOtherClass> gen = new GenericClass<InstanceOfOtherClass>("Aius");

    for(InstanceOfOtherClass listElement : gen) // This is the problem line; gen is underlined and listElement is expected to be an Object
    {
        System.out.println(listElement.getName());
    }

}

}
Run Code Online (Sandbox Code Playgroud)

java generics iterator

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

java while(LinkedList.iterator().hasNext())不起作用

我有以下while循环,如果我在while循环条件中放入this.boatTripsList.iterator().hasNext(),则抛出错误.当我创建迭代器然后放入while循环条件时,它将工作.为什么是这样?感谢和问候.(第二个版本抛出错误)

 public Journey(List<BoatTrip> trips) {
   this.boatTripsList = new LinkedList<BoatTrip>();
   Iterator<BoatTrip> iterator = trips.iterator();
   //add the given boat trips to the boattrips list
    while (iterator.hasNext()) {
         BoatTrip thistrip = iterator.next();
         this.boatTripsList.add(thistrip);
    }
}



public Journey(List<BoatTrip> trips) {
   this.boatTripsList = new LinkedList<BoatTrip>();
   //add the given boat trips to the boattrips list
    while (trips.iterator().hasNext()) {
         BoatTrip thistrip = iterator.next();
         this.boatTripsList.add(thistrip);
    }
}
Run Code Online (Sandbox Code Playgroud)

java iterator while-loop

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

标签 统计

iterator ×10

c++ ×6

java ×4

stl ×3

map ×2

c++11 ×1

char ×1

exception ×1

generics ×1

ruby ×1

string ×1

while-loop ×1