JSON for Modern C++ 3.10.4

◆ erase() [3/4]

template<template< typename U, typename V, typename... Args > class ObjectType = std::map, template< typename U, typename... Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = std::int64_t, class NumberUnsignedType = std::uint64_t, class NumberFloatType = double, template< typename U > class AllocatorType = std::allocator, template< typename T, typename SFINAE=void > class JSONSerializer = adl_serializer, class BinaryType = std::vector<std::uint8_t>>
template<class IteratorType , typename std::enable_if< std::is_same< IteratorType, typename basic_json_t::iterator >::value||std::is_same< IteratorType, typename basic_json_t::const_iterator >::value, int >::type = 0>
IteratorType nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType >::erase ( IteratorType  first,
IteratorType  last 
)
inline

Removes the element specified by the range [first; last). The iterator first does not need to be dereferenceable if first == last: erasing an empty range is a no-op.

If called on a primitive type other than null, the resulting JSON value will be null.

Parameters
[in]firstiterator to the beginning of the range to remove
[in]lastiterator past the end of the range to remove
Returns
Iterator following the last removed element. If the iterator second refers to the last element, the end() iterator is returned.
Template Parameters
IteratorTypean iterator or const_iterator
Postcondition
Invalidates iterators and references at or after the point of the erase, including the end() iterator.
Exceptions
type_error.307if called on a null value; example: "cannot use erase() with null"
invalid_iterator.203if called on iterators which does not belong to the current JSON value; example: "iterators do not fit current value"
invalid_iterator.204if called on a primitive type with invalid iterators (i.e., if first != begin() and last != end()); example: "iterators out of range"
Complexity
The complexity depends on the type:
  • objects: log(size()) + std::distance(first, last)
  • arrays: linear in the distance between first and last, plus linear in the distance between last and end of the container
  • strings and binary: linear in the length of the member
  • other types: constant
Example
The example shows the result of erase() for different JSON types.
1#include <iostream>
2#include <nlohmann/json.hpp>
3
4using json = nlohmann::json;
5
6int main()
7{
8 // create JSON values
9 json j_boolean = true;
10 json j_number_integer = 17;
11 json j_number_float = 23.42;
12 json j_object = {{"one", 1}, {"two", 2}};
13 json j_array = {1, 2, 4, 8, 16};
14 json j_string = "Hello, world";
15
16 // call erase()
17 j_boolean.erase(j_boolean.begin(), j_boolean.end());
18 j_number_integer.erase(j_number_integer.begin(), j_number_integer.end());
19 j_number_float.erase(j_number_float.begin(), j_number_float.end());
20 j_object.erase(j_object.find("two"), j_object.end());
21 j_array.erase(j_array.begin() + 1, j_array.begin() + 3);
22 j_string.erase(j_string.begin(), j_string.end());
23
24 // print values
25 std::cout << j_boolean << '\n';
26 std::cout << j_number_integer << '\n';
27 std::cout << j_number_float << '\n';
28 std::cout << j_object << '\n';
29 std::cout << j_array << '\n';
30 std::cout << j_string << '\n';
31}
basic_json<> json
default JSON class
Definition: json.hpp:3472

Output (play with this example online):
null
null
null
{"one":1}
[1,8,16]
null
The example code above can be translated with
g++ -std=c++11 -Isingle_include doc/examples/erase__IteratorType_IteratorType.cpp -o erase__IteratorType_IteratorType 
See also
see erase(IteratorType) – removes the element at a given position
see erase(const typename object_t::key_type&) – removes the element from an object at the given key
see erase(const size_type) – removes the element from an array at the given index
Since
version 1.0.0

Definition at line 21852 of file json.hpp.