如果字符串等于提供的原始单词,我试图从向量中删除字符串,以使输出不会将输入的单词视为其自身的字谜(如果有意义)
function myFunction() {
var x1 = document.getElementById("id1"); // renamed this
var x2 = document.getElementById("id2"); // added this
if (x1.style.display === "none") {
x1.style.display = "block";
x2.style.display = "none"; // added this to remove the old info
} else {
x1.style.display = "none";
}
}
function myFunction2() {
var x1 = document.getElementById("id1");
var x2 = document.getElementById("id2");
if (x2.style.display === "none") {
x2.style.display = "block";
x1.style.display = "none";
} else {
x2.style.display = "none";
}
}
完全不确定为什么会出现此错误,因为它应该删除原始单词,但出现分段错误:/
答案 0 :(得分:0)
std :: vector :: erase
在擦除点或擦除点之后使迭代器和引用无效,包括end()迭代器。
返回值 最后删除的元素之后的迭代器。如果迭代器pos 指向最后一个元素,则返回end()迭代器。
您需要稍微更改迭代器增量,以解决擦除后迭代器无效的问题。
for (std::vector<std::string>::const_iterator word = anagrams.begin();
word != anagrams.end();) {
if (*word != originalstring) {
++totalNumber;
++word;
// std::cout << *i;
} else {
word = anagrams.erase(word);
}
}
如tkasul所指出的那样,在此处使用std算法肯定是一种更干净的解决方案:
anagrams.erase(std::remove(anagrams.begin(), anagrams.end(), originalstring), anagrams.end());
totalNumber = anagrams.size();