Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;-在std::vector上迭代<&燃气轮机;从find_if返回 我正在学习C++,所以我觉得这应该是一个非常简单的答案-但我似乎找不到它。因此,如果这是幼稚的,我会提前道歉_C++_Vector_Iterator - Fatal编程技术网

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;
}