C++;-在std::vector上迭代<&燃气轮机;从find_if返回 我正在学习C++,所以我觉得这应该是一个非常简单的答案-但我似乎找不到它。因此,如果这是幼稚的,我会提前道歉
我有一个C++;-在std::vector上迭代<&燃气轮机;从find_if返回 我正在学习C++,所以我觉得这应该是一个非常简单的答案-但我似乎找不到它。因此,如果这是幼稚的,我会提前道歉,c++,vector,iterator,C++,Vector,Iterator,我有一个std::vector的值,我试图找到奇数值的索引 我遵循以下代码: (下文重复): //查找\u if示例 #include//std::cout #include//std::find_if #include//std::vector bool IsOdd(国际一级){ 返回((i%2)==1); } int main(){ std::vector myvector; myvector.push_back(10); myvector.push_back(25); myvector.p
std::vector
的值,我试图找到奇数值的索引
我遵循以下代码:
(下文重复):
//查找\u if示例
#include//std::cout
#include//std::find_if
#include//std::vector
bool IsOdd(国际一级){
返回((i%2)==1);
}
int main(){
std::vector myvector;
myvector.push_back(10);
myvector.push_back(25);
myvector.push_back(40);
myvector.push_back(55);
std::vector::iterator it=std::find_if(myvector.begin(),myvector.end(),IsOdd);
std::cout通过减去序列的开头,可以找到向量迭代器(更一般地说,是任何随机访问迭代器)的索引:
std::cout << "The index is " << (it - myvector.begin()) << '\n';
std::cout您可以增加it
并将其作为进一步迭代的起点:
std::cout << "odd values: ";
auto it = myvector.begin();
while(it != myvector.end())
{
it = std::find_if (it, myvector.end(), IsOdd);
if(it == myvector.end()) break;
std::cout << *it << ' ';
++it;
}
std::cout << endl;
现在,结果包含奇数值。(注意背面:插入器位于
标题中)您将需要一个循环。标准库的迭代器算法设计使这非常容易:
#include <iterator>
for (auto it = myvector.begin();
(it = std::find_if(it, myvector.end(), IsOdd)) != myvector.end(); )
{
std::cout << *it << " at index " << std::distance(myvector.begin(), it) << "\n";
}
#包括
for(auto it=myvector.begin();
(it=std::find_if(it,myvector.end(),IsOdd))!=myvector.end();)
{
std::cout更改这两行:
std::vector<int>::iterator it = std::find_if (myvector.begin(), myvector.end(), IsOdd);
std::cout << "The first odd value is " << *it << '\n';
std::vector::iterator it=std::find_if(myvector.begin(),myvector.end(),IsOdd);
std::cout//查找\u if示例
#include//std::cout
#include//std::find_if
#include//std::vector
bool IsOdd(国际一级){
返回((i%2)==1);
}
int main(){
std::vector myvector;
myvector.push_back(10);
myvector.push_back(25);
myvector.push_back(40);
myvector.push_back(55);
std::vector::iterator it=std::find_if(myvector.begin(),myvector.end(),IsOdd);
std::cout一个好的紧凑型解决方案可以是:
#包括
#包括
#包括
#包括
int main(){
向量常数v{1,4,9,11,2,7,8};
std::cout Trolly challenge:你能用远程遥控器完成这项工作吗?:@Lightness Racesinorbit:“我能”或“我会推荐它吗?”:-)我需要距离的信息(it-myvector.begin())
。谢谢!阅读全文真的有助于我的理解。nit:std::find\u if(++it,
@DavidRodríguez dribea很抱歉,++
在这种情况下有什么好处?是否存在运算符“+”没有过载的情况?我没有得到它。谢谢。it+1
需要随机访问迭代器,这是比++it
更强的要求(只需要前向迭代器)。在这种特殊情况下,这很好,因为std::vector::iterator
是随机访问,但使用++it
可以使解决方案适用于其他容器。it-myvector.begin()
也称为距离(myvector.begin(),it)
distance
可能有助于更好地理解正在发生的事情。您可以使用while(true)
简化循环。这样我们就不会在每次循环迭代中检查两次end。
#include <iterator>
for (auto it = myvector.begin();
(it = std::find_if(it, myvector.end(), IsOdd)) != myvector.end(); )
{
std::cout << *it << " at index " << std::distance(myvector.begin(), it) << "\n";
}
std::vector<int>::iterator it = std::find_if (myvector.begin(), myvector.end(), IsOdd);
std::cout << "The first odd value is " << *it << '\n';
std::vector<int>::iterator it = std::find_if (myvector.begin(), myvector.end(), IsOdd);
while ( it != myvector.end() ) {
std::cout << "The next odd value is " << *it << '\n';
it = std::find_if (++it, myvector.end(), IsOdd);
}
// find_if example
#include <iostream> // std::cout
#include <algorithm> // std::find_if
#include <vector> // std::vector
bool IsOdd (int i) {
return ((i%2)==1);
}
int main () {
std::vector<int> myvector;
myvector.push_back(10);
myvector.push_back(25);
myvector.push_back(40);
myvector.push_back(55);
std::vector<int>::iterator it = std::find_if (myvector.begin(), myvector.end(), IsOdd);
std::cout << "ODD values are: " << std::endl;
while(it != myvector.end() ){
std::cout << *it << " in position " << (it - myvector.begin()) << '\n';
it = std::find_if (++it, myvector.end(), IsOdd);
}
return 0;
}