假设我有以下代码:
vector<int> list;
for(auto& elem:list) {
int i = elem;
}
Run Code Online (Sandbox Code Playgroud)
我可以在elem不保持单独迭代器的情况下找到向量中的位置吗?
我有以下代码(编译器:MSVC++ 10):
std::vector<float> data;
data.push_back(1.0f);
data.push_back(1.0f);
data.push_back(2.0f);
// lambda expression
std::for_each(data.begin(), data.end(), [](int value) {
// Can I get here index of the value too?
});
Run Code Online (Sandbox Code Playgroud)
我在上面的代码片段中想要的是获取lambda表达式中数据向量中的值的索引.似乎for_each只接受单个参数函数.有没有替代这个使用for_each和lambda?
在c ++ 11中,如果我们有set<int> S; 我们可以说:
for (auto i: S)
cout << i << endl;
Run Code Online (Sandbox Code Playgroud)
但我们可以强制i成为迭代器,我的意思是编写一个相当于以下代码的代码:
for (auto i = S.begin(); i != S.end(); i++)
cout << (i != s.begin()) ? " " : "" << *i;
Run Code Online (Sandbox Code Playgroud)
或者我们可以做一些我们可以理解i集合(或向量)中的索引的东西吗?
另一个问题是我们怎么能说不要对所有元素都这样做,S但对于前半部分或除了第一部分之外的所有元素.
或者当我们有一个vector<int> V,并且想要打印它的第一个n值时我们该怎么做?我知道我们可以创建一个新的向量,但是将一个向量复制到一个新向量需要时间.
我有一个程序,我有两个std::map迭代器说,left和right分别.我想找到范围内的元素数量[left,right].
我天真地做了这样的事:int len = right - left.我认为它会很好,但它给了我一个错误
然后我发现distance(left, right)方法感谢Stack Overflow上的帖子,但不幸的是它具有线性时间复杂度.
是否有可能为此获得O(1)解决方案?