本文整理汇总了C++中value::erase方法的典型用法代码示例。如果您正苦于以下问题:C++ value::erase方法的具体用法?C++ value::erase怎么用?C++ value::erase使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类value
的用法示例。
在下文中一共展示了value::erase方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: diff
diff_result diff(value left, value right)
{
diff_result result;
if (left == right)
{
result.same = std::move(left);
}
else if (left.kind() != right.kind())
{
result.left = std::move(left);
result.right = std::move(right);
}
else switch (left.kind())
{
case kind::boolean:
case kind::decimal:
case kind::integer:
case kind::null:
case kind::string:
result.left = std::move(left);
result.right = std::move(right);
break;
case kind::array:
result.same = array();
result.left = array();
result.right = array();
for (value::size_type idx = 0; idx < std::min(left.size(), right.size()); ++idx)
{
diff_result subresult = diff(std::move(left.at(idx)), std::move(right.at(idx)));
result.same.push_back(std::move(subresult.same));
result.left.push_back(std::move(subresult.left));
result.right.push_back(std::move(subresult.right));
}
if (left.size() > right.size())
result.left.insert(result.left.end_array(),
std::make_move_iterator(left.begin_array() + right.size()),
std::make_move_iterator(left.end_array())
);
else if (left.size() < right.size())
result.right.insert(result.right.end_array(),
std::make_move_iterator(right.begin_array() + left.size()),
std::make_move_iterator(right.end_array())
);
break;
case kind::object:
result.same = object();
result.left = object();
result.right = object();
for (value::object_iterator liter = left.begin_object();
liter != left.end_object();
liter = left.erase(liter)
)
{
auto riter = right.find(liter->first);
if (riter == right.end_object())
{
result.left.insert({ liter->first, std::move(liter->second) });
}
else if (liter->second == riter->second)
{
result.same[liter->first] = std::move(liter->second);
right.erase(riter);
}
else
{
diff_result subresult = diff(std::move(liter->second), std::move(riter->second));
result.left[liter->first] = std::move(subresult.left);
result.right[liter->first] = std::move(subresult.right);
right.erase(riter);
}
}
for (value::object_iterator riter = right.begin_object();
riter != right.end_object();
riter = right.erase(riter)
)
{
result.right.insert({ riter->first, std::move(riter->second) });
}
break;
}
return result;
}