program tip

주어진 위치에서 목록의 특정 요소를 얻는 방법은 무엇입니까?

radiobox 2020. 9. 14. 08:16
반응형

주어진 위치에서 목록의 특정 요소를 얻는 방법은 무엇입니까?


그래서 목록이 있습니다.

list<Object> myList;
myList.push_back(Object myObject);

확실하지는 않지만 이것이 배열의 "0 번째"요소가 될 것이라고 확신합니다. "myObject"를 반환 할 수있는 함수가 있습니까?

Object copy = myList.find_element(0);

?


시퀀스의 N 번째 요소에 자주 액세스해야하는 경우 std::list이중 연결 목록으로 구현되는은 올바른 선택이 아닐 수 있습니다. std::vector아니면 std::deque더 나을 것입니다.

즉, 다음을 사용하여 N 번째 요소에 대한 반복자를 얻을 수 있습니다 std::advance.

std::list<Object> l;
// add elements to list 'l'...

unsigned N = /* index of the element you want to retrieve */;
if (l.size() > N)
{
    std::list<Object>::iterator it = l.begin();
    std::advance(it, N);
    // 'it' points to the element at index 'N'
}

랜덤 액세스를 제공하지 않는 컨테이너를 들어, 같은 std::list, std::advance호출 operator++반복자에 N시간. 또는 표준 라이브러리 구현에서 제공하는 경우 다음을 호출 할 수 있습니다 std::next.

if (l.size() > N)
{
    std::list<Object>::iterator it = std::next(l.begin(), N);
}

std::next는에 대한 호출을 효과적으로 래핑 std::advance하므로 더 N적은 코드 줄과 더 적은 가변 변수 로 반복기 시간을 더 쉽게 진행할 수 있습니다. std::nextC ++ 11에 추가되었습니다.


std::list인덱스가 주어진 요소를 가져 오는 기능을 제공하지 않습니다. 자주해야하는 경우 비효율적이기 때문에 권장하지 않는 일부 코드를 작성하여 얻을 수 있습니다.

필요한 것은 : std::vector. 다음과 같이 사용하십시오.

std::vector<Object> objects;
objects.push_back(myObject);

Object const & x = objects[0];    //index isn't checked
Object const & y = objects.at(0); //index is checked 

std::list<Object> l; 
std::list<Object>::iterator ptr;
int i;

for( i = 0 , ptr = l.begin() ; i < N && ptr != l.end() ; i++ , ptr++ );

if( ptr == l.end() ) {
    // list too short  
} else {
    // 'ptr' points to N-th element of list
}

가장 효율적인 방법은 아닐 수도 있습니다. 그러나 목록을 벡터로 변환 할 수 있습니다.

#include <list>
#include <vector>

list<Object> myList;

vector<Object> myVector(myList.begin(), myList.end());

그런 다음 [x] 연산자를 사용하여 벡터에 액세스합니다.

auto x = MyVector[0];

도우미 함수에 넣을 수 있습니다.

#include <memory>
#include <vector>
#include <list>

template<class T>
shared_ptr<vector<T>> 
ListToVector(list<T> List) {
shared_ptr<vector<T>> Vector {
        new vector<string>(List.begin(), List.end()) }
return Vector;
}

그런 다음 다음과 같은 도우미 기능을 사용하십시오.

auto MyVector = ListToVector(Object);
auto x = MyVector[0];

참고 URL : https://stackoverflow.com/questions/5733842/how-to-get-a-certain-element-in-a-list-given-the-position

반응형