【发布时间】:2020-10-27 09:59:58
【问题描述】:
我有一个std::vector<string>,其中每个元素都是一个单词。我想打印向量没有重复的单词!
我在网上进行了很多搜索,找到了很多材料,但我不能也不想使用哈希映射、迭代器和“高级”(对我而言)的东西。我只能使用纯字符串比较==,因为我还是个初学者。
所以,让 my_vec 和 std::vector<std::string> 从 std 输入初始化。我的想法是读取所有向量并在找到任何重复的单词后删除它:
for(int i=0;i<my_vec.size();++i){
for (int j=i+1;j<my_vec.size();++j){
if(my_vec[i]==my_vec[j]){
my_vec.erase(my_vec.begin()+j); //remove the component from the vector
}
}
}
我尝试测试std::vector<std::string> my_vec{"hey","how","are","you","fine","and","you","fine"}
我确实找到了
嘿,你好吗
所以看起来是对的,但是例如如果我写简单的向量std::vector<std::string> my_vec{"hello","hello","hello","hello","hello"}
我得到
你好你好
问题是每次调用erase 时,维度都会变小,因此我会丢失信息。我该怎么做?
【问题讨论】:
-
讽刺的是,
std::vector::erase通过返回一个新的迭代器解决了这个问题。您可以通过抵消++j来模拟这一点。 -
你真的应该至少使用迭代器,因为这样做会真正解决你的问题,同时以最温和的方式推广你应该长期接受的东西(即迭代器;标准库实际上是由它们生死攸关的)。
-
换个词的顺序可以吗?还是需要按照它们存储在向量中的顺序打印它们?
-
更简单的解决方案是创建一个新的无重复向量。
-
@idclev463035818 是的,如果改变单词的顺序也没关系