我有一个这样的列表列表:
std::list<std::list<double> > list;
我用一些列表填充了其中的 double (实际上很多,这就是为什么我没有使用 vector 的原因。所有这些复制占用了很多时间。)
如果列表不是列表而是 vector 或二维数组,假设我想访问可以像 list[3][3]
一样访问的元素。我该怎么做?
我知道访问列表中的元素是通过使用迭代器来完成的。不过,我想不出如何得到双倍的。
最佳答案
double item = *std::next(std::begin(*std::next(std::begin(list), 3)), 3);
不过,使用 vector 通常会有更好的性能;访问列表的元素 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;
}
关于c++ - 在 C++ 中访问列表列表的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12280593/