被移动后的vector可以继续push_back 元素吗?
时间: 2023-12-09 12:02:49 浏览: 34
被移动后的`vector`不能继续`push_back`元素,因为在移动操作之后,被移动的`vector`的内部状态就已经被设置为了移后即焚状态,即不能再使用该对象。如果尝试对该对象进行`push_back`操作,会导致未定义行为。
如果需要在移动后继续添加元素,可以将移动后的`vector`重新赋值为一个新的`vector`,然后对新的`vector`进行操作。例如:
```c++
#include <iostream>
#include <vector>
#include <string>
int main() {
std::vector<std::string> source = {"hello", "world"};
std::vector<std::string> dest = std::move(source); // 移动 source 到 dest
dest.push_back("new"); // 对 dest 进行操作
std::cout << "size of source: " << source.size() << std::endl; // 输出 0
std::cout << "size of dest: " << dest.size() << std::endl; // 输出 3
return 0;
}
```
在上面的代码中,先将`source`移动到`dest`,然后对`dest`进行了`push_back`操作,最终输出`source`的大小为0,`dest`的大小为3。
相关问题
vector的push_back和emplace_back
vector是C++ STL中的一个容器,用于存储线性序列的数据。在向vector中添加元素时,可以使用push_back和emplace_back两个函数。
push_back函数将一个元素添加到vector的末尾,如下所示:
```c++
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
```
emplace_back函数也将一个元素添加到vector的末尾,但它是通过调用元素的构造函数来构造元素的,而不是先构造一个临时对象再将其复制到vector中,如下所示:
```c++
std::vector<std::pair<int, std::string>> v;
v.emplace_back(1, "one");
v.emplace_back(2, "two");
v.emplace_back(3, "three");
```
在使用emplace_back函数时,我们可以直接传递构造函数中需要的参数,这样可以避免构造临时对象的开销,从而提高程序的效率。因此,如果元素类型支持移动构造函数,那么emplace_back函数通常比push_back函数更快。
vector的push_back与emplace_back
vector的push_back和emplace_back都是向容器中添加元素的方法。它们的作用是相同的,都可以将元素添加到vector的末尾。
区别在于使用push_back时,需要传入一个已经存在的元素或临时创建的元素,而使用emplace_back时,可以直接传入构造该元素所需的参数。也就是说,emplace_back可以避免额外的复制和移动操作,因为它可以在容器内直接构造元素。
因此,如果要向vector中添加已经存在的元素或临时创建的元素,可以使用push_back;如果要向vector中添加新元素并避免额外的复制和移动操作,可以使用emplace_back。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [说说vector的emplace_back和push_back](https://blog.csdn.net/iaibeyond/article/details/119153008)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [C++ 中”emplace_back” 与 “push_back” 的区别](https://download.csdn.net/download/weixin_38548704/13997185)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]