gpt4 book ai didi

c++ - 在模板类中构建 vector vector 的迭代函数

转载 作者:行者123 更新时间:2023-11-27 22:55:15 25 4
gpt4 key购买 nike

我目前正在编写模板矩阵。矩阵有一个

vector<vector<T>> names mat, and contains the vectors size (rows and cols).

我如何构建一个迭代 vector vector 的 const 函数?

注意:我需要建立一个

typedef typename std::vector<T>::const_iterator const_iterator

我问的是如何构建迭代器函数,而不是如何使用迭代器。

到目前为止,这就是我所拥有的:

typedef typename std::vector<T>::const_iterator const_iterator;

const_iterator end()
{
return mat[rowsNum][colsNum];
}

const_iterator begin()
{
return mat[0][0];
}

之前有过尝试: typedef 类型名 std::vector::const_iterator const_iterator;

const_iterator end()
{
return mat.end;
}

const_iterator begin()
{
return mat.begin;
}

-- 编辑--目前,我的代码如下所示:

template<class T>
class Matrix
{
private:
...
public:
...
typedef typename std::vector<T>::const_iterator const_iterator;

const_iterator end()
{
return mat[rowsNum][colsNum];
}

const_iterator begin()
{
return mat[0][0];
}
}
}

就是这样。有问题吗?

最佳答案

避免使用 std::vector<std::vector<T>> .它在内存中不连续,效率不高,从中处理迭代器并不简单。

我会建议你,因为你似乎想使用 Matrix 容器来展平你的数组并使用线性 std::vector<T>相反,您只需要重复使用 std::vector<T>::const_iterator .

示例

 template<class T>
struct Matrix {
using const_iterator = std::vector<T>::const_iterator;
std::vector<T> mat;
size_t rows;
size_t cols;

// [...] constructors etc...

const_iterator end() const {
return mat.end();
}

const_iterator begin() const {
return mat.begin();
}
// and you don't need to specify anything else for your iterators.

const T& operator()(size_t i, size_t j) const { return mat[i * rows + j]; } // depends if row major or column major storage
// [...] and other convenient methods...
}

关于c++ - 在模板类中构建 vector vector 的迭代函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33756815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com