我正面临一个奇怪的问题,即在迭代它时擦除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) 当std::string是""或载体没有任何元素,是begin()等于end()?
如果是这样,begin()/ 的价值是end()多少?
我有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) 我想知道Java的迭代器.为什么它们被设计为抛出并发修改异常?在C++ STL中,您可以遍历容器并随意修改内容,但为什么不能在Java中执行此操作?
编辑:更正的问题.框架不正确.
我正在尝试使用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) 据我所知,以下方案
#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)的操作属性是什么?
我有以下向量:
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上面工作?
我仍然试图找出每个之间的差异,并在阅读文档后选择.
有人可以向我解释为什么每个和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) 我想为一个工作正常的类创建一个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) 我有以下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)