实现向量的向量

Posted

技术标签:

【中文标题】实现向量的向量【英文标题】:implementing Vector of vectors 【发布时间】:2015-09-07 21:31:48 【问题描述】:

我实际上是在向量的向量上进行操作。但是我如何增加行和列指针(这里指针表示迭代器) 我的代码是这样的

bool searchMatrix(vector<vector<int>>& matrix, int target) 

    vector< vector<int> >::iterator row=matrix.begin();
    vector<int>::iterator col=row->begin();

    while(row!=matrix.end()&&col!=row->end())
    
        if(*col==target)
            return true;
        else
        
            if(*(col)+1<=target)
                ++col;
            else
                ++row;
        
    
    return false;

【问题讨论】:

你想达到什么目的?你的问题是什么? 事实上,这是一个非常奇怪的搜索。您应该说明您要解决的问题。 【参考方案1】:

如果您需要搜索整个矩阵,您需要有 2 个循环:行的外部循环和列的内部循环 - 这看起来更明显。

bool searchMatrix(vector<vector<int>>& matrix, int target) 
    for (vector< vector<int> >::iterator row=matrix.begin(); row != matrix.end(); ++row) 
       for (vector<int>::iterator col=row->begin(); col != col.end(); ++col)
          if(*col==target)
             return true;
       
    
    return false;

...但是当所有行的长度不同时,这种方法会更好。如果这是一个矩形矩阵,最好将其全部保存在一个长度为 row * col 的向量中 如果你愿意,你可以为它编写访问器方法(我会带来非模板方法不要过于复杂):

int& getElement(<vector<int>& matrix, size_t matrixWidth, size_t row, size_t col)

   // here's no boundary check!!!
   return matrix[row * matrixWidth + col];

在这种情况下,您的搜索变得简单:

bool searchMatrix(vector<vector<int>>& matrix, int target) 
    for (vector<int>::iterator item=matrix.begin(); item != matrix.end(); ++item)
        if(*item==target)
            return true;
    
    return false;

【讨论】:

【参考方案2】:

使用迭代器而不是索引来给出向量中的位置在很大程度上是一种风格选择。如果向量的向量对于您的数据结构(一个单独的问题)是一个不错的选择,并且您想要的算法如图所示,那么您已经达到了您的风格选择的极限,是时候放弃风格并专注于功能了。

更简单的表述:不要使用迭代器,使用索引。

bool searchMatrix(vector<vector<int>>& matrix, int target) 

    std::size_t row=0;
    std::size_t col=0;

    while(row!=matrix.size()&&col<matrix[row].size())
    
        if(matrix[row][col]==target)
            return true;
        else
        
            if(matrix[row][col]+1<=target)
                ++col;
            else
                ++row;
        
    
    return false;

【讨论】:

以上是关于实现向量的向量的主要内容,如果未能解决你的问题,请参考以下文章

python实现支持向量机之非线性支持向量机和核函数(理论五)

机器学习之支持向量机:支持向量机的Python语言实现

使用整数向量的向量对整数向量进行基数排序

多核支持向量机原理及实现

计算二维向量叉积

设计一个三维向量类,并实现向量的加法,减法以及向量与标量的乘法和除法运算