목록이 있습니다.위치에 주어진리스트에서 특정 원소를 얻는 방법?
list<Object> myList;
myList.push_back(Object myObject);
확실치 않지만 배열의 "0 번째"요소가 될 것이라고 확신합니다. "myObject"를 반환 할 수있는 함수가 있습니까?
Object copy = myList.find_element(0);
?
목록이 있습니다.위치에 주어진리스트에서 특정 원소를 얻는 방법?
list<Object> myList;
myList.push_back(Object myObject);
확실치 않지만 배열의 "0 번째"요소가 될 것이라고 확신합니다. "myObject"를 반환 할 수있는 함수가 있습니까?
Object copy = myList.find_element(0);
?
시퀀스의 N 번째 요소에 자주 액세스해야하는 경우 이중 연결 목록으로 구현 된 std::list
은 아마도 올바른 선택이 아닙니다. std::vector
또는 std::deque
일 가능성이 큽니다. 말했다
std::advance
를 사용하여 N 번째 요소에 대한 반복자를 얻을 수 있습니다 :
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::next
은 C++ 11에 추가되었습니다.
랜덤 액세스가 부족하여 링크 된 목록을 검색 할 때 성능 저하가 발생하지만, 벡터 또는 큐의 중간에 데이터를 삽입하거나 제거해야 할 경우 훨씬 더 큰 성능 저하를 피할 수 있습니다. 질문에는 실제 용도에 이상적인 용기를 사용하고 있는지 판단 할 수있는 충분한 정보가 포함되어 있지 않습니다. – tloach
std::list
은 색인이 지정된 요소를 가져 오는 기능을 제공하지 않습니다. 일부 코드를 작성하여 얻을 수는 있지만 권장하지 않는 경우가 많습니다. 자주 그렇게해야 할 경우 비효율적 일 수 있기 때문입니다.
std::vector
이 필요합니다. 더 배열이 없다
std::vector<Object> objects;
objects.push_back(myObject);
Object obj = objects[0]; //get element given an index
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
}
- 그것은 목록입니다 :로 사용합니다. 정수로 인덱싱하려면 '벡터'를 대신 사용 하시겠습니까? –
항상 요소 0을 원하면'front()'를 사용하십시오. –
테스트하지는 않았지만 myList.front() + num이 여기에서 작동한다고 가정합니다. –