@
3dwelcome 你似乎有个误解,认为 std::vector 可以通过拼接串联小数组的方式来进行优化,减少扩容时复制数据的开销,但这是不对的,C++标准上强要求 std::vector 的内存必须是连续的。如果不连续,它就不叫“数组”,也不叫“std::vector”。
为了保证这个连续性,所以数组或 std::vector 在插入数据或扩容时,势必需要进行数据复制,这在数据量大 /对象复杂的时候有不可忽略的性能开销。
所以其实你贴的文章中说得很清楚,在多插入场景下,std::vecotr 只有在非常小数据量的情况下,性能才比 std::list 要好。这一点无论从理论上还是实践中都可以得到证实。
在实际开发中,是不是因为自己的场景下数组比链表快那么一点点就一定要用数组呢?我觉得不对的。写代码时更多要考虑代码所要表达的思想,如果你代码的逻辑是一个典型的链表更优场景,就应该在代码中用链表。这样的代码长远来看才更好维护。如果确实为了极致性能想改成用数组,也需要加注释保证以后别人在数据集变大遇到性能问题时可以及时定位,甚至加 fallback 逻辑自动保证在大数据集情况下不会带来严重的性能回退。