标准库中没有与Boost中的small_vector和static_vector直接等效的内容。但是,可以使用std::vector和std::array来实现类似的功能。
#include
// 创建一个small_vector类,使用std::vector作为存储容器
template
class small_vector {
public:
// 构造函数
small_vector() : data_(N) {}
// 添加元素
void push_back(const T& value) {
if (size_ < N) {
data_[size_++] = value;
} else {
data_.push_back(value);
++size_;
}
}
// 获取元素数量
std::size_t size() const {
return size_;
}
// 索引访问元素
T& operator[](std::size_t index) {
return data_[index];
}
private:
std::vector data_; // 存储容器
std::size_t size_ = 0; // 元素数量
};
int main() {
small_vector sv;
sv.push_back(1);
sv.push_back(2);
sv.push_back(3);
sv.push_back(4);
sv.push_back(5); // 超过初始容量,会自动扩容
for (std::size_t i = 0; i < sv.size(); ++i) {
std::cout << sv[i] << " ";
}
return 0;
}
#include
// 创建一个static_vector类,使用std::array作为存储容器
template
class static_vector {
public:
// 添加元素
void push_back(const T& value) {
if (size_ < N) {
data_[size_++] = value;
}
}
// 获取元素数量
std::size_t size() const {
return size_;
}
// 索引访问元素
T& operator[](std::size_t index) {
return data_[index];
}
private:
std::array data_; // 存储容器
std::size_t size_ = 0; // 元素数量
};
int main() {
static_vector sv;
sv.push_back(1);
sv.push_back(2);
sv.push_back(3);
sv.push_back(4);
sv.push_back(5); // 超过初始容量,不会扩容
for (std::size_t i = 0; i < sv.size(); ++i) {
std::cout << sv[i] << " ";
}
return 0;
}
这些示例代码演示了如何使用std::vector和std::array来实现类似Boost中small_vector和static_vector的功能。small_vector类在超过初始容量时会自动扩容,而static_vector类则不会扩容,超过初始容量时元素将不会被添加。