相关疑难解决方法(0)

在C++ 11基于范围的for循环中查找元素的位置?

假设我有以下代码:

vector<int> list;
for(auto& elem:list) {
    int i = elem;
}
Run Code Online (Sandbox Code Playgroud)

我可以在elem不保持单独迭代器的情况下找到向量中的位置吗?

c++ iterator c++11

71
推荐指数
8
解决办法
4万
查看次数

如何使用for_each获取向量中的值的索引?

我有以下代码(编译器: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++ lambda c++11

25
推荐指数
5
解决办法
2万
查看次数

基于范围的c ++ 11

在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值时我们该怎么做?我知道我们可以创建一个新的向量,但是将一个向量复制到一个新向量需要时间.

c++ gcc for-loop c++11

10
推荐指数
2
解决办法
2万
查看次数

减去地图迭代器

我有一个程序,我有两个std::map迭代器说,leftright分别.我想找到范围内的元素数量[left,right].

我天真地做了这样的事:int len = right - left.我认为它会很好,但它给了我一个错误

然后我发现distance(left, right)方法感谢Stack Overflow上的帖子,但不幸的是它具有线性时间复杂度.

是否有可能为此获得O(1)解决方案?

c++ algorithm dictionary

3
推荐指数
1
解决办法
1151
查看次数

标签 统计

c++ ×4

c++11 ×3

algorithm ×1

dictionary ×1

for-loop ×1

gcc ×1

iterator ×1

lambda ×1