删除除某些位置之外的特定位置中的元素
deleting elements in particular locations except some locations
我知道如何从指定位置擦除c++矢量元素。假设我有向量A=[0 1 0 1 1 0 0 1]。我想擦除4个位置中的元素,位置存储在向量B=[1 4 7 8]中。这我可以这样做:
sort (B.begin(), B.end());
for(int i=B.size() - 1; i >= 0; i--){
A.erase(A.begin() + B[i]);
}
问题:我有向量C=[34]。向量C的大小总是小于B的大小。现在我必须删除A中的B.size()元素,如上面的代码所示。这里的条件是,如果B的任何索引与C的索引相同,则应该更改B的索引,使B的索引都与C相同。这意味着B的索引可以更改,但大小应该相同。对于这种情况,B的索引可以是B=[1 2 7 8]。现在B的索引不包含C的索引,我可以应用上面的代码。
有人能建议我怎么拿这个吗?
下面是一个尝试:
#include <random> // std::mt19937, std::uniform_int_distribution
#include <algorithm> // std::set_difference, std::sort
#include <vector> // std::vector
//Generate a random number called here rdmNb using <random>
//std::mt19937 gen(seed);
//std::uniform_int_distribution<int> rdmNb(0, A.size-1));
int main ()
{
//Data initialization (using C++11)
std::vector<int> vA = {0, 1, 0, 1, 1, 0, 0, 1};
std::vector<int> vB = { 1, 2, 7, 8};
std::vector<int> vC = {3, 4};
int rdmNb=1; //just so it compiles (replace by the random generator function)
//Code
std::vector<int> vD(vB.size(),-1);
std::vector<int>::iterator endIt;
std::sort (vB.begin(), vB.end());
std::sort (vC.begin(), vC.end());
do {
endIt = std::set_difference (vB.begin(), vB.end(),vC.begin(), vC.end(), vD.begin() );
for (std::vector<int>::iterator it(endIt); it< vD.end(); it++) {
*it = rdmNb;
vB = vD;
}
} while (*(dD.end()-1)==0); //while (endIt!=vD.end());
//Your normal code:
for(int i=vD.size() - 1; i >= 0; i--){
vA.erase(vA.begin() + vD[i]);
}
return 0;
}
相关文章:
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 求最大元素位置的分治算法
- 如何将元素添加到向量的字符串位置
- 这个返回元素位置的基于循环的函数有什么问题?
- 如何通过保持第一个插入的位置来对列表中插入的其余元素进行排序?
- 数组中所有元素的最新最小元素的第五个位置
- 是否有任何优雅的方式来遍历元素位置可以更改的列表?
- 如何从几乎排序的链表中分离放错位置的元素?
- 如何获得相同数量的第一个和第二个元素以及它们在c++中各自的位置
- 在给定元素在螺旋上的位置的情况下,在二维数组中查找元素
- 查找 2D 向量的位置,该向量是类C++的一个元素
- 创建一个函数以在给定位置将元素插入到列表中
- 如何查找数组中所有重复元素的位置
- 有没有办法在unordered_map的某个位置插入元素
- 这是查找向量中元素位置的合法方法吗?
- C 比较数组中的元素并打印位置
- 在 c++ 中替换文件中特定位置的元素
- 访问 std::string 中的元素,其中字符串的位置大于其大小
- 如何使用 std::find 找到元素的所有位置?
- 如何在默认和二维数组中找到顺序扩大元素的位置