c++ - 在 C++ 中访问列表列表的元素

标签 c++ stl iterator doubly-linked-list

我有一个这样的列表列表:

    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编译器,你可以自己实现beginnext:

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/

相关文章:

c++ - 线程本地存储和 iOS

c++ - 正在使用未初始化的变量

c++ - CAN 总线通信 - MSG 结构 (WinUser.h) Linux 等价物

c++ - 无法更正 C++ 代码中的错误

C++ STL 映射异常。 (不可变树的根)

javascript - 我如何交错/合并异步迭代器?

c++ - WinSNMP 设置源/管理器端口

c++ - 如何获得可调用类型的签名?

C++11 : error: ‘begin’ is not a member of ‘std’

python - 如何在 for 构造之外迭代读取 Python reader?