c++标准库容器有哪些 c++标准库有什么用
c标准库中的函数和stl操作在错误时会抛出异常,常见的异常类型包括:1. std::logic_error(逻辑错误);2. std::runtime_error(运行时错误),如std::invalid_argument、std::out_of_range、std::length_error;3. std::bad_alloc(内存分配失败);4. 与rtti相关的异常如std::bad_cast。stl容器操作中,push_back、emplace_back、resize、reserve可能会发送bad_alloc;at()方法访问越界时发送out_of_range;map的at()在键不存在时也发送out_of_range;字符串的substr在pos越界时发送out_of_ra nge;stoi等转换函数在输入无效时触发invalid_argument或out_of_range。新操作符在内存不足时触发bad_alloc,但可以不抛出避免触发。流操作默认不引发异常,但可以通过设置弥补码启用,如failbit触发std::ios_base::failure异常。了解这些有助于提高程序健壮性并合理使用异常处理机制。
C 标准库中的很多函数和STL操作在遇到错误时会抛出异常。了解这些异常行为,有助于我们在编写程序时更好地进行异常处理,程序的健壮性。1. 常见的C标准库异常类型
C标准库定义了一组通用的异常类,它们都继承自std::异常登录后复制。常见的包括:std::logic_error登录后复制:逻辑错误,通常是可以避免的编程错误。std::runtime_error登录后复制:运行时错误,通常是预测无法的外部因素导致。子类如:std::invalid_argument登录后复制:传递了错误参数。std::out_of_range登录后复制登录后复制:访问越界(比如用at()登录后复制登录后复制std::length_error登录后复制:尝试创建一个对象长度超出允许范围。std::bad_alloc登录后复制登录后复制:内存分配失败(new操作符发送)。std::bad_cast登录后复制、bad_typeid登录后复制等与RTTI相关的异常。
这些是我们在使用STL 和标准库函数时最常交换的异常类型。
立即学习“C免费学习笔记(深入)”;2. STL容器操作中的异常
不同的STL容器在执行操作时可能会引发异常,具体行为依赖操作本身和基础实现。vector、deque、list等动态扩容容器push_back / emplace_back:可能引发std::bad_alloc登录后复制登录后复制登录后复制,如果内存不足。resize / Reserve:同样可能因内存不足而引发bad_alloc登录后复制。at()方法:访问越界时触发std::out_of_range登录后复制登录后复制登录后复制。
例如:std::vectorlt;intgt; v(5);v.at(10) = 42; // 转发 std::out_of_range 异常登录后复制map / unordered_map插入操作(insert/emplace)一般转发不会异常,否则内存分配失败。at()登录后复制登录后复制会在键不存在时转发std::out_of_range登录后复制登录后复制登录后复制。stringsubstr(pos, len)登录后复制:如果pos超出字符串长度,则抛出out_of_range登录后复制登录后复制。stoi / stof / stol登录后复制等转换函数:输入异常时引发invalid_argument登录后复制或out_of_range登录后复制登录后复制。 3. 内存分配与new符操作
默认情况下,new登录后复制在内存分配失败时会抛出std::bad_alloc登录后复制登录后复制登录后复制。如果不希望抛出异常,可以使用no throw登录后复制登录后复制版本:int* p = new (std::nothrow) int[1000000000]; // 分配失败返回 nullptrif (!p) { //处理内存不足的情况}登录后复制
注意:不是所有平台或编译器都支持no throw登录后复制,所以最好还是配合try-catch使用。4. 流操作(iostream)的异常行为
流对象(如ifstream登录后复制,istringstream登录后复制)默认是不会发送异常的,但你可以通过设置异常掩码来启用异常:std::ifstream file(quot;data.txtquot;);file.exceptions(std::ifstream::failbit | std::ifstream::badbit);try { file gt;gt; value;} catch (...) { //处理读取失败}登录后复制failbit登录后复制:格式错误或无法读取。badbit登录后复制:流损坏。eofbit登录后复制:到达文件累加(通常不推送)。
开启异常后,流操作失败就会引发std::ios_base::failure登录后复制类型的异常。
基本上就这些常见情况。C 标准库中大多数函数都会在文档中标注是否会引发异常,建议查找官方文档确认注意事项。异常机制虽然强大,但也可有效避免使用,过度依赖try-catch来处理流程控制。
以上就是C标准库函数文章会引发哪些异常常见STL操作的异常行为说明的详细,更多请关注乐哥内容常识网其他相关!