我有两个向量:locs_current_all和sc_current_peaks_pos(两者都填充了位置值),一些元素是共同的。 在vector sc_current_peaks_pos中,我想从矢量sc_current_peaks_pos中删除索引。
所以这是我的代码。
第一种方法:尝试在向量中复制non_short_circuit_current只有不同的元素 locs_current_all和sc_current_peaks_pos。
vector<int> non_short_circuits_current;
int j_nsc=0;
for(int i=0;i<=sc_current_peaks_pos.size()-1;i++){
for(int k=j_nsc;k<=locs_current_all.size()-1;k++){
j_nsc++;
if(sc_current_peaks_pos[i]==locs_current_all[k])
non_short_circuits_current.push_back(locs_current_all[k]);
//else break ;
}
}
第二种方法:从矢量locs_current_all中删除sc_current_peaks_pos中的元素。
vector<int> non_short_circuits_current;
std::for_each(std::begin(sc_current_peaks_pos), std::end(sc_current_peaks_pos), [&](int indexOpp){
non_short_circuits_current.erase(locs_current_all [indexOpp]);
});// erase wants more parameters!!!
这两种方法都失败了。 在此先感谢您的帮助。
答案 0 :(得分:1)
如果我已正确理解您的任务,请尝试类似的
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <ctime>
int main()
{
const int N = 20;
std::srand( ( unsigned )std::time( 0 ) );
std::vector<int> v1( N );
std::vector<int> v2( N );
std::generate( v1.begin(), v1.end(), [] { return std::rand() % N; } );
std::generate( v2.begin(), v2.end(), [] { return std::rand() % N; } );
for ( int x : v1 ) std::cout << x << ' ';
std::cout << std::endl;
for ( int x : v2 ) std::cout << x << ' ';
std::cout << std::endl;
auto is_present = [&]( int x )
{
return std::find( v2.begin(), v2.end(), x ) != v2.end();
};
v1.erase( std::remove_if( v1.begin(), v1.end(), is_present ), v1.end() );
for ( int x : v1 ) std::cout << x << ' ';
std::cout << std::endl;
for ( int x : v2 ) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
输出
15 4 9 9 11 13 14 16 19 5 6 14 11 2 5 0 6 0 9 12
16 18 5 14 10 1 5 1 19 18 10 15 2 19 4 5 4 10 13 16
9 9 11 6 11 0 6 0 9 12
16 18 5 14 10 1 5 1 19 18 10 15 2 19 4 5 4 10 13 16
编辑:如果向量排序,那么您可以使用std::binary_search
,而不是std::find
,因为它在我的样本中使用。
答案 1 :(得分:0)
我正忙着回答这个问题而且我的网络连接已经死了,所以我不打算再发布任何代码示例,之前的答案有一些很好的代码供你使用;但我认为值得注意的是:
std::remove()
不会从容器中删除或删除元素它只会移动容器中的元素。vector.erase()
删除容器中的元素,因为容器本身将有足够的知识从自身中删除元素(即因为这在容器之间有所不同,所以方法必须是成员)。vec.begin()
循环到vec.end()
并且在循环结束之前擦除元素,那么您已经遇到了麻烦。std
库可能已经有一些您可能想要使用的算法。