Warm greetings! This lesson introduces data streams, which are essentially continuous datasets. Think of a weather station or a gaming application gathering data per second — both are generating data streams! We will master handling these data streams using C++
, learning to access elements, slice segments, and even convert these streams into strings for easier handling.
In C++
, data streams can be represented using vectors
and maps
from the STL (Standard Template Library). Let’s consider a straightforward C++
class named DataStream
. This class encapsulates operations related to data streams in our program:
To use it, we create a sample data stream as an instance of our DataStream
class, where each element is a map
:
To look into individual elements of a data stream, we use indexing. The get()
method we introduce below fetches the i+1
-th element from the data stream:
Here, we can see the get()
method in action:
In essence, stream.get(2)
fetched us {"id": 3, "value": 300}
— the third element (since indexing starts from 0
). At the same time, stream.get(-1)
fetches the last element, which is {"id": 4, "value": 400}
.
The code snippet if (i < 0) { i += data.size(); }
is particularly relevant here. It allows negative indexing by converting a negative index into the corresponding positive index, effectively letting -1
refer to the last element, -2
to the second last, and so on. This approach is useful for accessing elements from the end of the data stream efficiently.
Fetching a range of elements rather than a single one is facilitated by slicing. We introduce a slice()
method to support slicing:
Here's a quick usage example:
For better readability, we may wish to convert our data streams into strings. To ensure the conversion works consistently, we will create a custom string representation for our data elements. Have a look at the to_string
method in action:
To see it in action:
It prints: [{"id": 1, "value": 100}, {"id": 2, "value": 200}, {"id": 3, "value": 300}, {"id": 4, "value": 400}]
.
In this lesson, we've explored data streams, discovered how to represent and manipulate them using native C++
data structures, especially vectors
and maps
, and encapsulated operations on data streams with C++
classes.
Now it's time to apply your newfound knowledge in the practice exercises that follow!
