我目前正在尝试复制a的一部分std::vector,从第一个值开始,直到"遇到"一系列值.我主要使用STL算法,尤其是std::find_if()(我知道还有其他方法可以实现第一句中所述的目标,但我主要是为了理解STL,所以使用它们会破坏基本目的).
作为一个例子,假设一个vector保持整数元素(originalvec在代码中)被复制,直到第一个6,然后直接连续7遇到.我知道如何比较6,然后我想在lambda的相同调用中进行比较,如果在6后面有一个7.我认为(不确定)为此,我需要得到一个迭代器6,然后使用std::advance()或者只使用operator++迭代器并将解除引用的值与7进行比较.但是,我不知道如何获得6 /当前比较的数字的迭代器?
#include <algorithm>
#include <vector>
using namespace std;
int main() {
vector <int> originalvec = { 4, 8, 7, 6, 55, 2, 6, 7, 8 };
vector <int> newvec;
copy(originalvec.begin(),
find_if(originalvec.begin(), originalvec.end(), [](int curnum) {
return (curnum == 6);
}),
back_inserter(newvec));
//why does newvec.begin() (instead of back_inserter(newvec)) not work?
//current result: newvec = {4, 8, 7}
//wanted result : newvec = {4, 8, 7, 6, 55, …Run Code Online (Sandbox Code Playgroud)