除非有理由使用其他容器,优先使用STL vector
文章插图
SL.con.2: Prefer using STL vector by default unless you have a reason to use a different containerSL.con.2:除非有理由使用其他容器 , 默认使用STL vectorReason(原因)
【除非有理由使用其他容器,优先使用STL vector】vector and array are the only standard containers that offer the following advantages:
只有vector和array具有下面的优势:
- the fastest general-purpose access (random access, including being vectorization-friendly);最快的一般目的访问(随机访问 , 包含矢量化友好)
- the fastest default access pattern (begin-to-end or end-to-begin is prefetcher-friendly);
- 最快的默认访问模式(从前到后 , 从后到前都对预抓取友好)
- the lowest space overhead (contiguous layout has zero per-element overhead, which is cache-friendly).
- 最小的空间代价(连续的内存布局没有任何多余元素 , 对缓存友好)
通常你需要对容器添加和移除元素 , 因此默认使用vector;如果你不需要修改容器长度 , 使用array 。
Even when other containers seem more suited, such as map for O(log N) lookup performance or a list for efficient insertion in the middle, a vector will usually still perform better for containers up to a few KB in size.
即使其他容器看起来更合适 , 例如为了O(LogN)的搜索复杂度而考虑map , 或者为更有效率的在中间插入元素 , 当长度在数KB之内时 , 通常vector仍然可以提供更好的性能 。
Note(注意)
string should not be used as a container of individual characters. A string is a textual string; if you want a container of characters, use vector*char_type*/> or array*char_type*/> instead.
string不应该作为单独字符的容器使用 , string就是文本字符串;如果你需要字符容器,使用vector*char_type*/> 或者 array*char_type*/>而不是std::string 。
Exceptions(例外)
If you have a good reason to use another container, use that instead.
如果你有充分理由使用其他容器 , 使用它 。
For example(例如):
- If vector suits your needs but you don't need the container to be variable size, use array instead.如果vector可以满足你的需求 , 但是你不需要长度可变 , 使用array 。
- If you want a dictionary-style lookup container that guarantees O(K) or O(log N) lookups, the container will be larger (more than a few KB) and you perform frequent inserts so that the overhead of maintaining a sorted vector is infeasible, go ahead and use an unordered_map or map instead.如果你需要字典风格的搜索容器保证O(K)或O(log N)复杂度的搜索 , 容器会更大(大于数KB)而且你需要频繁执行插入操作 , 从而无法导致无法维护有序vector , 可以使用unordered_map或者map 。
To initialize a vector with a number of elements, use ()-initialization. To initialize a vector with a list of elements, use {}-initialization.
如果希望用元素数量初始化vector , 使用()初始化形式 。 如果希望使用元素列表初始化数组 , 使用{}形式 。
推荐阅读
- Biogen将使用Apple Watch研究老年痴呆症的早期症状
- Eyeware Beam使用iPhone追踪玩家在游戏中的眼睛运动
- 或使用天玑1000+芯片?荣耀V40已全渠道开启预约
- 苹果将推出使用mini LED屏的iPad Pro
- 手机能用多久?如果出现这3种征兆,说明“默认使用时间”已到
- 苹果有望在2021年初发布首款使用mini LED显示屏的 iPad Pro
- 笔记本保养有妙招!学会这几招笔记本再战三年
- 数据可视化三节课之二:可视化的使用
- 索尼sw77与sw55的使用差别感受
- 爆料称一加9系列与潜望式镜头无缘 继续使用普通长焦