使用迭代器在矢量中插入下一个值以映射
Inserting next value in vector to map using iterator
我想将矢量中的下一个和上一个元素添加到地图中。 我以为我可以使用迭代器来做到这一点,但以下代码对我不起作用。 有人可以解释一下如何做到这一点以及我的错误是什么。 谢谢。
90 for ( it = vec.begin(); it != vec.end(); it++)
91 {
92 int Flag1 = vec.front();
93 int Flag2 = vec.back();
94
95 if( *it == Flag1)
96 mymap[*it].insert(*(it++)); // Add next element
97 else if( *it == Flag2 )
98 mymap[*it].insert(*(it--)); // Add previous element
99 else
100 {
101 mymap[*it].insert(*(it--)); // Add previous element
102 mymap[*it].insert(*(it++)); // Add next element
103 }
104 }
你不想在这个循环中移动你的迭代器(it++
和++it
都会这样做!),你只想得到下一个和上一个。在 C++11 中,我们在一个简单的函数调用中得到了这些:
std::next(it);
std::prev(it);
在C++11之前,您可以轻松编写它们:
template <typename It> It next(It it) { std::advance(it, 1); return it; }
template <typename It> It prev(It it) { std::advance(it, -1); return it; }
因此,添加下一个和上一个元素将如下所示:
mymap[*it].insert(*next(it));
mymap[*it].insert(*prev(it));
请注意,您检查的不是迭代器是在开头还是结尾,而是它们的值。如果您有重复的值,这可能会有问题。而是更喜欢与开头和结尾进行比较:
if (it == vec.begin()) {
// only add next
mymap[*it].insert(*next(it));
}
else if (next(it) == vec.end()) {
// only add prev
mymap[*it].insert(*prev(it));
}
else {
// add both
mymap[*it].insert(*next(it));
mymap[*it].insert(*prev(it));
}
相关文章:
- 重新定位图像时如何前进到下一个内存块
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- CIN 仅在输入非数字值时跳过下一个 CIN
- 查找最小的下一个更大的元素
- 转到基于范围的 for 循环中的下一个迭代器
- 如何检查流中文件的下一个单词是否为 alpha?
- 如何打印下一个字母直到 Z 并继续到 A?
- 在使用堆栈为下一个最大数字编写代码时面临 SIGSEGV(分段错误)
- 使用一个内存集数组和单个堆栈在 O(n) 中查找数组的下一个更大元素
- 有没有一种标准方法可以在C++中获取第 n 个"下一个"浮点值
- 下一个云桌面客户端构建过程
- C++自定义流操纵器,用于更改流上的下一个字符串
- 链表指针赋值为什么我们不能直接将尾巴分配给 temp 而不是尾巴>尾巴下一个
- 下一个排列定义
- 如何寻址循环中的下一个迭代器并在同一地址插入元素
- 使用迭代器在矢量中插入下一个值以映射
- 只是尝试插入一个节点并将指针设置为下一个节点C++
- 如何获取插入菜单项时要使用的下一个命令 ID
- 在链表中插入似乎将下一个指针设置错误