在矢量内拆分 deques
Splitting deques inside vector
我正在尝试处理一个非常奇怪的问题。我对 STL 容器没有太多经验,所以它们的机制对我来说是一个很大的谜。好的,回到主题。我需要创建一个 deques 向量,然后将该向量中的每个现有 deque 分成两半。从现在开始,每一半都将创建单独的双节。 我期待这样的事情:
vector{ deque{1,2,3,4,5} } -----> vector { deque{1,2,3}, deque{4,5} }
#include <iostream>
#include <deque>
#include <vector>
int main() {
std::vector< std::deque<int> > vector_of_deques;
vector_of_deques.push_back( std::deque<int>{1, 2, 3, 4, 5} );
std::deque<int> deque = *(vector_of_deques.begin());
int split_position;
if (deque.size() % 2 == 0)
split_position = deque.size() / 2;
else
split_position = int(deque.size() / 2) + 1;
vector_of_deques.emplace_back( deque.begin() + split_position, deque.end() );
deque.erase( deque.begin() + split_position, deque.end() );
for (auto i: vector_of_deques) {
for (auto j: i)
std::cout << j << ", ";
std::cout << std::endl;
}
return 0;
}
输出:
1, 2, 3, 4, 5,
4、5、
预期:
1, 2, 3,
4、5、
我不知道发生了什么。有人可以解释为什么我对这些容器的思考方式是错误的吗?这对我有很大的帮助。
我相信问题就在这里:
std::deque<int> deque = *(vector_of_deques.begin());
您正在复制 deque,而您真正想要的是std::deque<int>&
. 实际上,当您的代码执行此操作时:
deque.erase( deque.begin() + split_position, deque.end() );
您正在从副本中删除,而不是更改原始矢量。
相关文章:
- C++将向量的向量拆分为向量的N个子向量
- 如何拆分文件中.txt字母并使用c ++使用数组进行扑克?
- OpenCV 4.1.2 - 从网络摄像头获取帧并将其拆分
- 使用 C++ 将命令行参数拆分为参数/向量
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- 如何在C++中将数字拆分为数字
- 在线程之间拆分任务总是值得的吗?
- 将字符串拆分为标记,并将标记拆分为两个单独的数组
- 在 c++ 中拆分类和标头中的继承,错误
- 在矢量内拆分 deques
- 拆分重叠段
- 我还可以添加什么来按空格或空格正确拆分C++字符串?
- 通过空行提升拆分字符串
- 给定一个大小为 N 的数组 S,检查是否可以将序列拆分为两个序列
- 如何按多个括号类型拆分字符串,但仍将括号保留在C++?
- 将 Boost.Spirit.X3 解析器拆分为多个 TU
- 将字符串拆分为等长 c++ 的部分
- 将执行循环拆分为多个线程 (1-N-1-N-1..)
- 使用范围拆分string_view
- 将 std::大小为 m 的向量拆分为大小为 n 的向量