c++ splice 使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ splice 使用相关的知识,希望对你有一定的参考价值。
以下是源代码,但是得不到想要的结果,请求高手解决。谢谢
#include<list>
#include<iostream>
#include<algorithm>
using namespace std;
print(int i)
cout<<i<<" ";
void main()
list<int> lin_1,lin_2;
lin_1.push_back(123);
lin_1.push_back(0);
lin_1.push_back(34);
lin_1.push_back(1123);
//lin_1: 123 0 34 1123
lin_2.push_back(12);
lin_2.push_back(100);
lin_2.push_back(22);
lin_2.push_back(76);
//lin_2: 12 100 22 76
for_each(lin_1.begin(),lin_1.end(),print);
cout<<endl;
//打印 123 0 34 1123
for_each(lin_2.begin(),lin_2.end(),print);
cout<<endl;
//打印 12 100 22 76
lin_1.splice(find(lin_1.begin(),lin_1.end(),0),lin_2);
for_each(lin_1.begin(),lin_1.end(),print);
cout<<endl;
//打印 123 12 100 22 76 0 34 1123
lin_1.splice(find(lin_1.begin(),lin_1.end(),0),++lin_2.begin(),--lin_2.end());//这里出现错误
for_each(lin_1.begin(),lin_1.end(),print);
cout<<endl;
//打印 123 100 22 0 34 1123
for_each(lin_2.begin(),lin_2.end(),print);
cout<<endl;
//打印 12 76
使用 splice() 从数组中删除匹配条件的项目
【中文标题】使用 splice() 从数组中删除匹配条件的项目【英文标题】:Using splice() to remove items that matches condition from array 【发布时间】:2019-09-06 04:18:06 【问题描述】:我试图通过 for 循环删除与状态数组中的条件匹配的所有项目。但它似乎只删除了数组中的最后一项,而不是匹配的项。我是否错误地使用了 .splice() ?提前致谢。代码是:
rmTravel()
for(var i = 0; i < this.cards.length; i++)
if(this.cards[i].sg_categories.includes("travel"))
this.cards.splice(i, 1);
console.log('Removed following card:', this.cards[i].slug)
console.log('Cards in cards state: ', this.cards)
【问题讨论】:
1. 如果splice()
应该从数组中删除一个项目,那么您的console.log()
调用是不是太晚了?您不应该在删除项目之前打印它吗? 2. 当您从数组中删除一个项目时,以下项目不会向数组的开头移动一个位置吗?如果是这样,您可能应该在删除后减少 i
以处理移动到已删除项目位置的项目。
【参考方案1】:
这是一个有点经典的问题;您正在向前迭代并同时缩小数组,因此您最终会跳过记录。
我建议改用Array.prototype.filter()
this.cards = this.cards.filter(( sg_categories ) =>
!sg_categories.includes('travel'))
这会将数组减少为sg_categories
属性不包含“travel”的条目。
【讨论】:
太棒了。这就是我一直在寻找的。谢谢。以上是关于c++ splice 使用的主要内容,如果未能解决你的问题,请参考以下文章
C++中list列表中的splice函数有3中声明方式,请问这三种声明方式里面的参数表示啥意思