我实际上是在矢量矢量上运行。但是我如何增加行和列指针(这里的指针意味着迭代器) 我的代码就像
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;
}
答案 0 :(得分:0)
如果你需要搜索整个矩阵,你需要有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;
}
答案 1 :(得分:0)
使用迭代器而不是索引来赋予向量中的位置主要是样式选择。如果向量向量是您数据结构的一个不错的选择(一个单独的问题),并且您所需的算法如图所示,那么您已经达到了样式选择的极限,是时候放弃样式并专注于功能。
更简单地说:不要使用迭代器,使用索引。
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;
}