Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;。删除额外连续重复字符串的最有效方法?_C++_String_Stdvector_Erase_Repeat - Fatal编程技术网

C++ C++;。删除额外连续重复字符串的最有效方法?

C++ C++;。删除额外连续重复字符串的最有效方法?,c++,string,stdvector,erase,repeat,C++,String,Stdvector,Erase,Repeat,如何删除简单重复的字符串有很多问题: 但我的问题与他们不同 例如,如果我有entryvector: {“111”、“222”、“222”、“222”、“333”、“222”} 我需要得到以下结果: {“111”、“222”、“333”、“222”} 这意味着只删除附近的重复值 我目前的临时解决方案是创建另一个向量,从entry vector复制每个元素,并检查此元素是否与第二个向量的最后一个元素不相等。以下是一个改编自std::unique页面的示例: bool comp (std::stri

如何删除简单重复的字符串有很多问题:

但我的问题与他们不同

例如,如果我有entry
vector

{“111”、“222”、“222”、“222”、“333”、“222”}

我需要得到以下结果:

{“111”、“222”、“333”、“222”}

这意味着只删除附近的重复值


我目前的临时解决方案是创建另一个向量,从entry vector复制每个元素,并检查此元素是否与第二个向量的最后一个元素不相等。

以下是一个改编自std::unique页面的示例:

bool comp (std::string &i, std::string &j) {
  return (i==j);
}

int main () {
  std::string mys[] = {"111", "222", "222", "222", "333", "222"};       
  std::vector<std::string> myvector (mys,mys+6);
  myvector.erase(std::unique (myvector.begin(), myvector.end(), comp), myvector.end());  
  return 0;
}
bool comp(std::string&i,std::string&j){
返回值(i==j);
}
int main(){
std::字符串mys[]={“111”、“222”、“222”、“222”、“333”、“222”};
std::vector myvector(mys,mys+6);
擦除(std::unique(myvector.begin()、myvector.end()、comp)、myvector.end());
返回0;
}
以及原始代码的链接:

更新

正如注释中所建议的,您可以跳过comparator方法,但请记住,如果向量中的对象没有=,则可以使用它。我之所以举这个例子,是因为它是100%完整的,并且可以很容易地扩展到其他类型的对象

更新2


是的,你应该擦除向量的最后一部分,因为,正如doc所说的,<强>独特的>方法将返回“迭代器到应该被认为是它的新过去的元素”的/P>只使用STD::独特的C++在标准库中有很多好的,例如(或者如果您不想修改原始集合)。IMO(唯一+擦除)应该应用组合。不需要自定义比较器,默认情况下,

std::unique
的两个参数版本使用
运算符==
。@JoachimPileborg是的,我知道,但我想给出更完整的版本,可能会帮助OP或其他人,他们可以更改为他们想要的任何类型的对象(考虑到该对象没有==op)在我看来,最好在它之后添加一个擦除操作,因为在这个操作中容器大小没有被修改。@AbhishekBansal你是对的,我试图成为最快的,但我忘记了…std::erase部分不存在,erase是std::vector对象的一个成员。