. ⁄ + ^* v Đôi mắt của La Tư Lôi Đặc và Gómez ánh lên vẻ kiên định.
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include
using namespace std;
// Định nghĩa cấu trúc cho mỗi đoạn dữ liệu
struct DataSegment {
int start;
int length;
string data;
};
// Hàm hiển thị thông tin của DataSegment
void displayDataSegment(const DataSegment& segment) {
cout << "Start: " << segment.start << ", Length: " << segment.length << ", Data: " << segment.data << endl;
}
int main() {
// 1. Khởi tạo (Initialization)
vector<DataSegment> segments;
//2. Thêm đoạn dữ liệu (Add Data Segment)
DataSegment segment1 = {0, 10, "AAAAAAAAAA"};
segments.push_back(segment1);
DataSegment segment2 = {15, 5, "BBBBB"};
segments.push_back(segment2);
// 3. Hiển thị các đoạn dữ liệu hiện có (Display Existing Data Segments)
cout << "Initial Data Segments:" << endl;
for (const auto& segment : segments) {
displayDataSegment(segment);
}
cout << endl;
// 4. Kiểm tra xem một vị trí có thuộc đoạn dữ liệu nào không (Check if a Location Belongs to a Data Segment)
int locationToCheck = 5;
bool found = false;
for (const auto& segment : segments) {
if (locationToCheck >= segment.start && locationToCheck < segment.start + segment.length) {
cout << "Location " << locationToCheck << " belongs to segment starting at " << segment.start << endl;
found = true;
break;
}
...
if (!found) {
cout << "Location " << locationToCheck << " does not belong to any segment." << endl;
}
cout << endl;
//5. Tìm đoạn dữ liệu chứa một vị trí (Find Data Segment Containing a Location)
int locationToFind = 17;
DataSegment* foundSegment = nullptr;
for (auto& segment : segments) {
if (locationToFind >= segment.start && locationToFind < segment.start + segment.length) {
foundSegment = segment;
break;
}
}
if (foundSegment != nullptr) {
cout << "Location " << locationToFind << " is found in segment: " << endl;
displayDataSegment(*foundSegment);
} else {
cout << "Location " << locationToFind << " is not found in any segment." << endl;
}
cout << endl;
// 6. Xóa một đoạn dữ liệu (Remove a Data Segment)
int indexToRemove = 0; // Xóa đoạn đầu tiên
if (indexToRemove >= 0 && indexToRemove < segments.size()) {
segments.erase(segments.begin() + indexToRemove);
cout << "Segment at index " << indexToRemove << " removed." << endl;
} else {
cout << "Invalid index to remove." << endl;
}
// 7. Hiển thị các đoạn dữ liệu sau khi xóa (Display Data Segments After Removal)
cout << "Data Segments After Removal:" << endl;
for (const auto& segment : segments) {
displayDataSegment(segment);
}
cout << endl;
//8. Thêm đoạn dữ liệu mới, có thể bị trùng lặp với đoạn đã có (Add New Data Segment - May Overlap)
DataSegment segment3 = {12, 7, "CCCCCCC"};
segments.push_back(segment3);
// 9. Hiển thị các đoạn dữ liệu sau khi thêm đoạn trùng lặp (Display Data Segments After Adding Overlapping Segment)
cout << "Data Segments After Adding Overlapping Segment:" << endl;
for (const auto& segment : segments) {
displayDataSegment(segment);
}
cout << endl;
// 10. Sắp xếp các đoạn dữ liệu theo vị trí bắt đầu (Sort Data Segments by Start Position)
sort(segments.begin(), segments.end(), [](const DataSegment& a, const DataSegment& b) {
return a.start < b.start;
});
// 11. Hiển thị các đoạn dữ liệu sau khi sắp xếp (Display Data Segments After Sorting)
cout << "Data Segments After Sorting:" << endl;
for (const auto& segment : segments) {
displayDataSegment(segment);
}
cout << endl;
// 12. Giải phóng bộ nhớ (Cleanup - Not really needed in this simple example but good practice)
segments.clear();
return 0;
}