initial commit
This commit is contained in:
83
cplusplus/geminitutorial/tutorial2/tutorial-2.2-plan.md
Normal file
83
cplusplus/geminitutorial/tutorial2/tutorial-2.2-plan.md
Normal file
@@ -0,0 +1,83 @@
|
||||
# Tutorial 2.2 Plan: Modern STL Containers & Algorithms
|
||||
|
||||
**Objective:** Use the workhorse containers and algorithms with a focus on performance. The project involves parsing mock CSV tick data using algorithms and lambdas to perform queries.
|
||||
|
||||
---
|
||||
|
||||
## 1. Project Setup
|
||||
|
||||
We will continue working within the `tutorial-2` directory. No new directory creation is needed.
|
||||
|
||||
## 2. Defining Tick Data Structure
|
||||
|
||||
We'll define a simple struct to represent a tick, containing a timestamp, price, and volume.
|
||||
|
||||
**File:** `tutorial-2/src/TickData.h`
|
||||
```cpp
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <chrono>
|
||||
|
||||
struct TickData {
|
||||
std::chrono::system_clock::time_point timestamp;
|
||||
double price;
|
||||
long volume;
|
||||
|
||||
// Optional: for easy printing/debugging
|
||||
std::string toString() const;
|
||||
};
|
||||
```
|
||||
|
||||
## 3. CSV Parsing Utility
|
||||
|
||||
We'll implement a function to parse a single line of CSV data into a `TickData` object. This will involve string manipulation and conversion. `std::string_view` will be crucial here for zero-copy parsing.
|
||||
|
||||
**File:** `tutorial-2/src/CsvParser.h`
|
||||
```cpp
|
||||
#pragma once
|
||||
|
||||
#include "TickData.h"
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace CsvParser {
|
||||
TickData parseTickCsvLine(std::string_view line);
|
||||
std::vector<TickData> parseTickCsvFile(std::string_view filename);
|
||||
} // namespace CsvParser
|
||||
```
|
||||
|
||||
**File:** `tutorial-2/src/CsvParser.cpp`
|
||||
```cpp
|
||||
#include "CsvParser.h"
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <stdexcept>
|
||||
#include <iostream> // For error reporting
|
||||
|
||||
// Implement parseTickCsvLine and parseTickCsvFile
|
||||
```
|
||||
|
||||
## 4. Main Application: Parsing and Querying
|
||||
|
||||
In `tutorial-2/src/main.cpp`, we will:
|
||||
1. Generate some mock CSV tick data (or read from a static file).
|
||||
2. Use `CsvParser::parseTickCsvFile` to load the data into a `std::vector<TickData>`.
|
||||
3. Perform various queries using modern STL algorithms and lambdas:
|
||||
* Find the highest price.
|
||||
* Calculate the total volume.
|
||||
* Filter ticks above a certain price.
|
||||
* Find the average price within a time range.
|
||||
* Use `std::unordered_map` to aggregate volume by some key (e.g., minute of the hour).
|
||||
|
||||
## 5. Updating the Build System
|
||||
|
||||
Modify `tutorial-2/CMakeLists.txt` to include `TickData.cpp` and `CsvParser.cpp` (if needed, `TickData` might just be a header). Ensure proper linking.
|
||||
|
||||
## 6. Summary and Key Takeaways
|
||||
|
||||
This tutorial will provide hands-on experience with:
|
||||
* Efficient string handling using `std::string_view`.
|
||||
* Storing structured data in `std::vector`.
|
||||
* Performing data transformations and queries using STL algorithms and lambdas.
|
||||
* Using `std::unordered_map` for fast lookups and aggregations.
|
||||
Reference in New Issue
Block a user