std::vector push_back() 方法
- 自 C++20 起
- 自 C++11 起
- 直到 C++11
// (1) Non const version only
constexpr void push_back( T const& value );
// (2) Non const verison only
constexpr void push_back( T&& value );
// (1) Non const version only
void push_back( T const& value );
// (2) Non const version only
void push_back( T&& value );
// (1) Non const version only
void push_back( T const& value );
将给定的元素值附加到容器的末尾。
- (1) 新元素初始化为 value 的副本。
- (2) value 被移动到新元素中。
失效
如果新的 size()
大于 capacity()
,则所有迭代器和引用(包括超出末尾迭代器)都将失效。
否则只有超出末尾迭代器会失效。
参数
value
- 要附加的元素的值
类型要求
T
在此列表中是容器的元素类型。
- (1) -
T
必须满足CopyInsertable
的要求。 - (2) -
T
必须满足MoveInsertable
的要求。
返回值
(无)
复杂度
分摊常数 - O(1)。
异常
如果抛出异常(这可能是由于 Allocator::allocate()
或元素复制/移动构造函数/赋值导致的),此函数没有效果(强异常保证)。
- 自 C++11 起
如果
T
的移动构造函数不是 noexcept 且 T
不能 CopyInsertable 到 *this
中,则 vector 将使用抛出异常的移动构造函数。如果它抛出异常,则保证被放弃,并且效果未指定。备注
某些实现还会抛出 std::length_error
,当 push_back()
导致重新分配超出 max_size()
时(由于隐式调用等同于 reserve(size()+1)
)。
示例
Main.cpp
#include <vector>
#include <iostream>
#include <iomanip>
int main()
{
std::vector<std::string> letters;
letters.push_back("abc");
std::string s = "def";
letters.push_back(std::move(s));
std::cout << "vector holds: ";
for (auto&& i : letters) std::cout << std::quoted(i) << ' ';
std::cout << "\nMoved-from string holds " << std::quoted(s) << '\n';
}
输出
vector holds: "abc" "def"
Moved-from string holds ""