第9.5章: 非检查操作

English

概述

每个带检查的操作都有一个对应的 _unchecked 变体,它跳过边界检查。只有在你已经确认下标或条件有效时才使用它们。对非检查操作传入无效参数是未定义行为。

1. 非检查操作对照表

带检查(安全) 非检查(更快) 适用于
operator[](idx) index_unchecked(idx) vector、deque、array、span、index_span、string_view
front() front_unchecked() 所有拥有所有权的容器、span、string_view
back() back_unchecked() 除 forward_list 之外的所有容器
pop_back() pop_back_unchecked() vector、deque、list、bitvec
pop_front() pop_front_unchecked() deque、list、forward_list
push_back() push_back_unchecked() vector、bitvec
emplace_back() emplace_back_unchecked() vector

2. 示例:reserve + push_back_unchecked


#include <fast_io_dsal/vector.h>
#include <fast_io.h>

int main() {
    ::fast_io::vector<::std::size_t> v;
    v.reserve(100zu); // Pre-allocate space for 100 elements

    // Safe: push_back checks capacity and may reallocate
    v.push_back(42zu);

    // Fast: assumes capacity is available (we just reserved 100)
    for (::std::size_t i{}; i < 50zu; ++i) {
        v.push_back_unchecked(i); // No capacity check
    }
}
提示:当你已知最终大小时,在紧凑的循环中使用 reserve() + push_back_unchecked()。这样可以避免反复检查容量,明显快于在循环里调用 push_back()。

要点