C++ C++;。删除额外连续重复字符串的最有效方法?
如何删除简单重复的字符串有很多问题: 但我的问题与他们不同 例如,如果我有entryC++ 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
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对象的一个成员。