我有这个问题,我目前正在使用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中那些位置的元素。根据我的研究,没有办法直接索引列表,所以我不确定从哪里开始。
答案 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。