从向量中删除字符串会产生分段错误

时间:2019-03-04 00:18:44

标签: c++ c++11

如果字符串等于提供的原始单词,我试图从向量中删除字符串,以使输出不会将输入的单词视为其自身的字谜(如果有意义)

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";
  }
}

完全不确定为什么会出现此错误,因为它应该删除原始单词,但出现分段错误:/

1 个答案:

答案 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();