、STL中的线性表 1.题目描述:设计一个简单的图书馆管理系统,使用STL中的vector或list来实现对图书的增删改查操作( STL参考网址: https://cplusplus.com/reference/)
时间: 2024-09-27 17:09:22 浏览: 30
线性表子系统(C++版本以及C语言版本均有).rar
STL (Standard Template Library) 提供了两种内置的动态数组容器,用于存储线性数据结构:`std::vector` 和 `std::list`。它们都可以用来实现图书馆管理系统的图书操作。
1. `std::vector`:它是一个连续的内存块,支持随机访问,这意味着你可以通过索引直接访问元素,查找、插入和删除速度较快,特别是对于频繁进行索引操作的情况。适合需要高效查询的位置操作,例如查找特定页码的书籍。
```cpp
#include <vector>
// ...
class BookLibrary {
private:
std::vector<Book> books;
public:
void addBook(Book book) {
books.push_back(book);
}
void removeBook(int index) {
books.erase(books.begin() + index);
}
void updateBook(int index, Book newBook) {
books[index] = newBook;
}
const Book& getBook(int index) const { return books[index]; }
};
```
2. `std::list`:这是一个双向链表,元素的插入和删除效率较高,因为只需要改变相邻节点的指针即可,而不需要移动大量的元素。然而,由于它不支持随机访问,所以查找某个位置的书会比`vector`慢得多。
```cpp
#include <list>
// ...
class BookLibrary {
private:
std::list<Book> books;
public:
void addBook(Book book) {
books.push_back(book);
}
void removeBook(const Book& book) {
books.remove(book);
}
// 更新操作通常涉及到迭代找到对应的节点,不如vector直接
// void updateBook(...) {...}
const Book* getBook(int index) const { // 返回指向book的指针而非引用,因为list没有随机访问
for (size_t i = 0; i < books.size(); ++i) {
if (books[i].getId() == index) {
return &books[i];
}
}
return nullptr;
}
};
```
阅读全文