特性 std::array std::vector 扩容机制 固定大小(编译期确定) 动态扩容(2倍增长策略) 当 push_back/emplace_back 导致 size() == capacity() 时触发扩容。 扩容代价 无 O(n)时间复杂度 性能特征 零运行时开销 有内存管理开销 (4)编译器优化潜力 优化类型 std::array std::vector 内联
std::array::rend std::array::size std::array::swap std::deque std::deque::assign std::deque::at std::deque::back std::deque::begin std::deque::cbegin std::deque::cend std::deque::clear std::deque::crbegin std::deque::crend std::deque::deque std::deque::emplace std::deque:...
std::array::size std::array::swap std::deque std::deque::assign std::deque::at std::deque::back std::deque::begin std::deque::cbegin std::deque::cend std::deque::clear std::deque::crbegin std::deque::crend std::deque::deque std::deque::emplace std::deque::emplace_back std:...
可以发现左值引用真是用的很不爽,右值引用的出现解决了这个问题,在STL的很多容器中,都实现了以右值引用为参数的移动构造函数和移动赋值重载函数,或者其他函数,最常见的如std::vector的push_back和emplace_back。参数为左值引用意味着拷贝,为右值引用意味着移动。 class Array { public: ... // 优雅 Array(Array&&...
push_back push_back函数的主要作用是将元素添加到容器末尾,其声明如下: voidpush_back(constT&value);voidpush_back(T&&value);//C++11 起 emplace_back emplace_back函数与emplace类似,只不过是在容器末尾就地构造元素,其函数声明如下: template<class...Args> ...
emplace_back比push_back的效率更高,但是使用emplace_back的代码健壮性不如push_back,例如 点击查看代码 std::vector<int> vec1; vec1.push_back(3); vec1.emplace_back(5);std::vector<std::vector<int>> vec2;//vec2.push_back(3);// 报错vec2.emplace_back(5);// vec2 = { {0,0,0,0,0...
std::array::rend std::array::size std::array::swap std::deque std::deque::assign std::deque::at std::deque::back std::deque::begin std::deque::cbegin std::deque::cend std::deque::clear std::deque::crbegin std::deque::crend std::deque::deque std::deque::emplace std::deque:...
为什么不是std::array 下面两种情况,small_vector比std::array更合适: 需要空间后续动态增长,不仅仅是编译期的固定size。 像上面的例子,根据不同条件使用std::vector/small_vector,且使用的API接口是统一的。 其他用法 NoHeap: 当vector中数据个数超过指定个数时,不会再使用堆。如果个数超过指定个数,会抛出std:...
// 例1:Array用法int main(){ Array a; // 做一些操作 ... // 左值a,用std::move转化为右值 Array b(std::move(a)); } 实例:vector::push_back使用std::move提高性能 复制代码12345678910111213141516c// 例2:std::vector和std::string的实际例子int main() { std::string str1 = 'aacasxs'; ...
emplace_back(): Adds a new element to the end of the vector, constructed in place. std::vector<std::pair<int, std::string>> vec; vec.emplace_back(1, "one"); // Constructs a pair inside the vectorCode language: C++ (cpp)