c ++数组评估

时间:2011-11-07 07:22:38

标签: c++ arrays conditional-statements evaluation

有没有办法在C ++中“批量评估”数组的内容?例如,设int number [10] = {23,42,12,42,53,10,0,0,0,0}。有没有办法循环遍历数组中的每个元素并检查元素是否满足指定的条件?

简而言之,我希望能够做到这样的事情:

if(every element in the array meets arbitrary condition)
do this

if(array element from m to array element n==something)
do this

对于小阵列,我知道我可以使用类似:if(numbers [0] == blabla)&& if(numbers [n] == blabla),然后执行此操作,但显然,在评估非常大的数组时,这不是一个现实的解决方案。

6 个答案:

答案 0 :(得分:3)

你可能的意思是“为了”

for(int i = 0; i < size_of_array; i++)
  if( the_condition_function(numbers[i])){
     //do this
  }

答案 1 :(得分:3)

“if(数组中的每个元素满足任意条件)执行此操作” 与STL:

bool IsOdd (int i) 
{
  return ((i%2)==1);
}
  //...
{
  vector<int> myvector;
  vector<int>::iterator it;

  myvector.push_back(2);
  myvector.push_back(4);
  myvector.push_back(6);
  myvector.push_back(8);

  it = find_if (myvector.begin(), myvector.end(), IsOdd);
  if (it == myvector.end())
    cout<< "No Odd numbers";
  }

“if(数组中的每个元素满足任意条件)执行此操作” 没有STL

numbers[10]={2,4,6,8,10,12,14,16,18,20}
bool oddExist=false;
for (int i =0;i<10;++i)
  {
     if ( numbers[i]%2 )
     {                      //added
       oddExist=true;     
       break;               //added  for efficiency, was not in 
     }                      //        first post. 
  }
      if (!oddExist)
        cout<< "No Odd numbers";

“if(数组元素从m到数组元素n == something)执行此操作” 与STL

void printNumber (int i) 
{
  cout  << i;
}

  // ... 

  vector<int> myvector;
  myvector.push_back(10);
  myvector.push_back(20);
  myvector.push_back(30);
  myvector.push_back(40);

  for_each (myvector.begin(), myvector.end(), printNumber);

“if(数组元素从m到数组元素n == something)执行此操作” 没有STL

numbers[10]={2,4,6,8,10,12,14,16,18,20}

for (int i =0;i<10;++i)
   cout << numbers[i];

答案 2 :(得分:2)

  

有没有办法遍历数组中的每个元素并检查元素是否符合指定的条件?

您可以使用 std::for_each 算法。

答案 3 :(得分:2)

由于您的条件似乎是每个元素都满足条件,因此使用std::findstd::find_if等算法可能更有效。对于find_if,您可以定义一个仿函数,当条件未满足时返回true,算法将在第一次出现时停止,而不是遍历整个数组。

答案 4 :(得分:0)

只是为了竞争:

你也可以使用ranged,但是编译器必须已经实现了C ++ 11版本的那部分。我知道microsoft visual C ++(2010)还没有。虽然我相信GCC 4+已经有了。

int my_array[] = {2,4,6,8,10,12,14,16,18,20};
for (int &x : my_array) {
    std::cout << x << std::endl;
}

另一个好处是将std :: for_each与lambda函数一起使用,我发现msdn:非常善于解释lambda。

int my_array[] = {2,4,6,8,10,12,14,16,18,20};
std::for_each(my_array[0], my_array[10], [&] (int* iter) {
    std::cout << *iter << std::endl;
});

或者只是如上所述的for语句。

答案 5 :(得分:0)

  

if(数组中的每个元素满足任意条件)
  这样做

if (std::find_if(&a[0], &a[size], testUnaryFunction) == &a[size])
{
    do this  // if all elements in i => [0-size) testUnaryFunction(a[i]) return false
}
  

if(数组元素从m到数组元素n ==某事)
  这样做

if (std::equal(&a[0], &a[size], &b[0], testBinaryFunctin))
{
    do this  // if all elements in i => [0-size) testBinaryFunctin(a[i], b[i]) returns true
}

如果您有C ++ 11,那么您可以使用闭包:

if (std::find_if(&a[0], &a[size], [](type const& val) { return val%2 == 0;}) == &a[size])
{
    do this // if all elements are odd
}

if (std::equal(&a[0], &a[size], &b[0], [](type const& lhs, type const& rhs) { return lhs == rhs;}))
{
    do this  // if arrays a and b are equal.
}