c++ - 使用插入成员函数将范围插入空向量是否合法?
问题描述
为空时insert
进入std::vector
命名是否合法?myvec
像这样:
myvec.insert(myvec.end(), other.begin(), other.end());
我不确定myvec.end()
在这种情况下会指向哪里。
另外,什么时候myvec
是空的,上面和下面有什么不同吗?
myvec.insert(myvec.begin(), other.begin(), other.end());
这些都是合法的吗?
解决方案
C++20 最终工作草案22.2.1 通用容器要求 [container.requirements.general]
- begin() 返回一个引用容器中第一个元素的迭代器。end() 返回一个迭代器,它是容器的结束值。如果容器为空,则 begin() == end()。
是的,它们是一样的。他们合法吗?
从std::vector
插入时的 cppreference
template< class InputIt >
void insert( iterator pos, InputIt first, InputIt last);
迭代器 pos 有效吗?(即空向量的 std::begin )。是的,但你不能取消引用它。
推荐阅读
- javascript - 在图像上添加产品列表
- ios - Alamofire 不发出 GET 请求,而是使用 Success 调用完成处理程序
- mocking - 如何在没有嵌入式服务器或新集群的情况下模拟 couchbase 以进行验收测试?
- angular-material - 单个模板中的材料角多表数据源 + 材料角多表“找不到具有 id 的列”
- go - Go 变量初始化语法
- java - 如何将多个 Spring Boot 应用程序合并为一个?
- java - 如何验证非必需的 RequestParam 不为空?
- javascript - 输入中的格式化数字反应
- sql - 选择中的条件语句
- reactjs - 使用 AsyncStorage 在 React Native 中执行 CRUD 操作