#include <vector>
#include <algorithm>
#include <functional>
template <class _FwdIt, class _FwdIt2>
_FwdIt remove_by_index(_FwdIt first,
_FwdIt last,
_FwdIt2 sortedIndexFirst,
_FwdIt2 sortedIndexLast)
{
_FwdIt copyFrom = first;
_FwdIt copyTo = first;
_FwdIt2 currentIndex = sortedIndexFirst;
size_t index = 0;
for (; copyFrom != last; ++copyFrom, ++index)
{
if (currentIndex != sortedIndexLast &&
index == *currentIndex)
{
// Should not delete this item, so don't increment copyTo
++currentIndex;
}
else
{
// Copy the values if we're at different locations
if (copyFrom != copyTo)
*copyTo = *copyFrom;
++copyTo;
}
}
return copyTo;
}
int main(int argc, char* argv[])
{
std::vector<int> myVector;
for (int i = 0; i < 10; ++i)
myVector.push_back(i * 10);
std::vector<size_t> deleteIndex;
deleteIndex.push_back(3);
deleteIndex.push_back(6);
myVector.erase(
remove_by_index(myVector.begin(), myVector.end(), deleteIndex.begin(), deleteIndex.end()),
myVector.end());
for (std::vector<int>::iterator it = myVector.begin();
it != myVector.end(); ++it)
{
printf("%d ", *it);
}
return 0;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Z3ZEl0LCBjbGFzcyBfRndkSXQyPgpfRndkSXQgcmVtb3ZlX2J5X2luZGV4KF9Gd2RJdCBmaXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgX0Z3ZEl0IGxhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX0Z3ZEl0MiBzb3J0ZWRJbmRleEZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICBfRndkSXQyIHNvcnRlZEluZGV4TGFzdCkKewogIF9Gd2RJdCBjb3B5RnJvbSA9IGZpcnN0OwogIF9Gd2RJdCBjb3B5VG8gPSBmaXJzdDsKICBfRndkSXQyIGN1cnJlbnRJbmRleCA9IHNvcnRlZEluZGV4Rmlyc3Q7CgogIHNpemVfdCBpbmRleCA9IDA7CiAgZm9yICg7IGNvcHlGcm9tICE9IGxhc3Q7ICsrY29weUZyb20sICsraW5kZXgpCiAgewogICAgaWYgKGN1cnJlbnRJbmRleCAhPSBzb3J0ZWRJbmRleExhc3QgJiYKICAgICAgICBpbmRleCA9PSAqY3VycmVudEluZGV4KQogICAgewogICAgICAvLyBTaG91bGQgbm90IGRlbGV0ZSB0aGlzIGl0ZW0sIHNvIGRvbid0IGluY3JlbWVudCBjb3B5VG8KICAgICAgKytjdXJyZW50SW5kZXg7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIC8vIENvcHkgdGhlIHZhbHVlcyBpZiB3ZSdyZSBhdCBkaWZmZXJlbnQgbG9jYXRpb25zCiAgICAgIGlmIChjb3B5RnJvbSAhPSBjb3B5VG8pCiAgICAgICAgKmNvcHlUbyA9ICpjb3B5RnJvbTsKICAgICAgKytjb3B5VG87CiAgICB9CiAgfQogIHJldHVybiBjb3B5VG87Cn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCnsKICBzdGQ6OnZlY3RvcjxpbnQ+IG15VmVjdG9yOwoKICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyArK2kpCiAgICBteVZlY3Rvci5wdXNoX2JhY2soaSAqIDEwKTsKCiAgc3RkOjp2ZWN0b3I8c2l6ZV90PiBkZWxldGVJbmRleDsKICBkZWxldGVJbmRleC5wdXNoX2JhY2soMyk7CiAgZGVsZXRlSW5kZXgucHVzaF9iYWNrKDYpOwoKICBteVZlY3Rvci5lcmFzZSgKICAgIHJlbW92ZV9ieV9pbmRleChteVZlY3Rvci5iZWdpbigpLCBteVZlY3Rvci5lbmQoKSwgZGVsZXRlSW5kZXguYmVnaW4oKSwgZGVsZXRlSW5kZXguZW5kKCkpLCAKICAgIG15VmVjdG9yLmVuZCgpKTsKCiAgZm9yIChzdGQ6OnZlY3RvcjxpbnQ+OjppdGVyYXRvciBpdCA9IG15VmVjdG9yLmJlZ2luKCk7CiAgICAgICBpdCAhPSBteVZlY3Rvci5lbmQoKTsgKytpdCkKICB7CiAgICBwcmludGYoIiVkICIsICppdCk7CiAgfQoKICByZXR1cm4gMDsKfQ==