c++ - 如何使用 std::move 根据 C++ 中向量的内容移动元素?
问题描述
我想知道是否可以根据向量中的内容将元素移动到另一个向量。例如,我有一个三个向量。点数,Player1 和 Player1type。点向量中有整数,player1type 中有字符串,player1 应该有来自点向量的数字。
int main() {
vector <int> points {1,2,3,4,5};
vector <string> player1type {"Power1", "Steal", "Power2", "Steal", "Power1"};
vector <int> player1 {1,1,1,1,1};
move(points.begin(), points.end(), player1.begin());
return 0;
}
正如您在上面的代码中所见,它只是通过替换 player1 中已有的元素来将点中的元素移动到 player1。如果 player1type 中没有任何 Steal 元素,我想要移动的元素。所以它会是这样的:
player1type = {"Power1", "Steal", "Power2" ,"Steal", "Power1"};
Player1 = {1,3,5};
我试图实现这一点,但我无法让它工作。
int main() {
vector <int> points {1,2,3,4,5};
vector <string> player1type {"Power1", "Steal", "Power2", "Steal", "Power1"};
vector <int> player1 {1,1,1,1,1};
if (!player1type.empty() && player1type[0] == "Power1") {
move(points.begin(), points.end(), player1.begin());
}
else if (!player1type.empty() && player1type[0] == "Power2") {
move(points.begin(), points.end(), player1.begin());
}
else {
cout << "Can't apply this sorry" << endl;
}
return 0;
}
这似乎不起作用,它所做的只是添加数字而不管语句如何。
解决方案
整个向量的移动元素使用points.begin(), points.end()
.
对于您的条件情况,您应该移动 ifplayer1type!="Steal"
并相应地设置开始和结束移动点,您可以在循环中实现:
vector <int> points {1,2,3,4,5};
vector <string> player1type {"Power1", "Steal", "Power2", "Steal", "Power1"};
vector <int> player1 {1,1,1,1,1};
for(int i=0; i<5; ++i)
{ if (!player1type.empty() && player1type[i] != "Steal")
move(points.begin()+i, points.begin()+i+1, player1.begin()+i);
else player1[i]=0;
}
for(auto i:player1)
cout<<i; // 1 0 3 0 5
推荐阅读
- c - 为什么它说“我们不能包含limits.h!” 在dirent.h?
- regex - 找到一个字符的第一个实例,然后向后工作
- python - Numpy:从 N 个离散概率分布中的每一个中随机选择 1 个样本
- flyway - 无法从数据库 sqlserver:// 获取连接
: ;数据库名称= 对于用户“sa”:无法打开数据库 - terraform - terraform 和 list,split 返回未知索引的最后一个元素
- visual-studio-code - 按文件名模式的 VSCode 语言扩展
- google-apps-script - 从 Docs Apps 脚本中的 PositionedImage 获取 Alt 信息
- html - font-size 62.5% 有什么作用?
- python - “列表索引必须是整数或切片,而不是字符串”,但它们实际上是整数
- ruby-on-rails - 如何将我的 Rails 应用程序发布到 github 页面