我一直试图将Java代码转换为C ++,但偶然发现了这部分代码,该代码重复了几次。

//JAVA
TreeSet<String> currentState = new TreeSet<String>();
TreeSet<String> allTransitions = new TreeSet<String>();
       .
       .
       .
currentState.addAll(allTransitions);
       .
       .
       .
currentState.removeAll(allTransitions);


我试图通过键入以下代码在C ++中实现相同的目的:

//C++
set<string> currentState;
set<string> allTransitions;
       .
       .
       .
currentState.insert(allTransitions);
       .
       .
       .
currentState.erase(allTransitions);


当我尝试编译此代码时,我会遇到很多错误,所以我想知道是否甚至可以轻松地将相同的函数从Java复制到C ++,或者是否存在另一种向彼此添加和删除集合的方法。

提前致谢!

最佳答案

第一个需要像这样的begin和end迭代器:

currentState.insert(allTransitions.begin(), allTransitions.end());


如果在std::set上操作(您可以将其转换为函数),则第二个最容易使用for循环执行:

for(const auto& t: allTransitions)
  currentState.erase(t);


如果您要在排序后的std::vector/deque/list等位置进行操作,则可能已将设置的功能用于第二个操作(std::set_difference/set_intersection等)

09-10 02:26