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

参考技术A 如果你想验证的话就把你第一次调用splice的语句用//注释调,然后把第二次调用的语句改成我给你写的那样,然后你就会得到你要的答案了

使用 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中声明方式,请问这三种声明方式里面的参数表示啥意思

splice和slice的区别

在 Linux 上使用 `splice`... 其他系统还有啥?

数组循环删除数据时,splice使用注意

数组的splice 与 slice有啥区别

JavaScript 使用 splice 方法删除数组元素可能导致的问题