使用列表作为索引从另一个列表中打印某些元素

时间:2016-03-13 20:30:14

标签: c++ list stl

我有这个问题,我目前正在使用C ++。

您将获得一个列表L和另一个列表P,其中包含按升序排序的整数 订购。操作printLots(L,P)将打印位于L中的元素 由P指定。例如,如果P = 1,3,4,6,则位置1,3,4和6中的元素 在L中打印。编写程序printLots(L,P)。您可以只使用公众 STL容器操作。

这是我到目前为止的代码。

void printLots(list<int> L, list<int> P)
{
    list<int>::iterator myListIterator;

    for (myListIterator = P.begin();
        myListIterator != P.end();
         ++myListIterator)
    {
        //Not sure what to do here
    }
}

我知道我可以很容易地打印List P的内容,但是我不知道如何使用它作为索引来打印List L中那些位置的元素。根据我的研究,没有办法直接索引列表,所以我不确定从哪里开始。

2 个答案:

答案 0 :(得分:0)

假设使用std :: list是一个要求(在您的问题中不确定),那么正如Karoly在评论中所述,使用计数器来跟踪您在链接列表中的位置。

void printLots(const std::list<int>& L, const std::list<int>& P)
{
  std::list<int>::const_iterator it;
  for (it = P.begin(); it != P.end(); ++it) 
  {
    int indexRef = *it;
    // You never know
    if (indexRef < 0 || indexRef >= L.size()) continue;
    std::list<int>::const_iterator it2;
    int cntr = 0;
    for (it2 = L.begin(); it2 != L.end(); ++it2)
    {
      if (cntr == indexRef)
      {
        std::cout << *it2 << std::endl;
        break;
      }
      cntr++;
    }
  }
}

答案 1 :(得分:0)

这是一个想法:

#include <list>
#include <iostream>

typedef std::list<int> list_of_int;

void print( const list_of_int& L, const list_of_int& P )
{
  int p = 0;
  for ( list_of_int::const_iterator i = L.begin(), j = P.begin(); i != L.end(); ++i, ++p )
  {
    if ( p == *j )
    {
      std::cout << *i << ' ';
      ++j;
    }
  }
}

int main()
{
  list_of_int 
  L = {0, 10, 20, 30, 40, 50, 60}
  , P = {2, 4, 5};
  print( L, P );
  return 0;
}

试试here