oak*_*ree 7 c++ iterator stl doubly-linked-list
我有一个这样的列表列表:
std::list<std::list<double> > list;
Run Code Online (Sandbox Code Playgroud)
我在其中填充了一些带有双打的列表(实际上非常多,这就是为什么我没有使用向量.所有这些复制都需要花费很多时间.)
假设我想访问可以加入的元素,list[3][3]如果列表不是列表而是矢量或二维数组.我该怎么办?
我知道访问列表中的元素是通过使用迭代器完成的.我无法弄清楚如何摆脱双重.
double item = *std::next(std::begin(*std::next(std::begin(list), 3)), 3);
Run Code Online (Sandbox Code Playgroud)
不过,使用向量通常会有更好的性能;访问n列表的元素是 O(n)。
如果您担心拼接容器内部的性能,则可以使用deque,它具有operator[]、从任一端进行摊销常数插入和删除,以及从内部进行线性时间插入和删除。
对于 C++03 编译器,您可以begin自己实现next:
template<typename Container>
typename Container::iterator begin(Container &container)
{
return container.begin();
}
template<typename Container>
typename Container::const_iterator begin(const Container &container)
{
return container.begin();
}
template<typename T, int n>
T *begin(T (&array)[n])
{
return &array[0];
}
template<typename Iterator>
Iterator next(Iterator it, typename std::iterator_traits<Iterator>::difference_type n = 1)
{
std::advance(it, n);
return it;
}
Run Code Online (Sandbox Code Playgroud)