如何删除 C++ 给定矩阵中的特定行和列?
Posted
技术标签:
【中文标题】如何删除 C++ 给定矩阵中的特定行和列?【英文标题】:How can I delete specific rows and columns in a given matrix for C++? 【发布时间】:2020-07-05 18:02:30 【问题描述】:我有一个chars
的多维vector
,我希望能够根据命令删除特定的列或行。例如,如果我有这个矩阵:
A B C D
L K T M
A M T N
删除第二列会将矩阵更改为
A C D
L T M
A T N
然后,删除第三行会将矩阵更改为
ACD
LTM
我为此目的编写的代码目前在删除行和列时都返回错误:
void verticalSearch(vector< vector<char> >matrix, int startIndex, int lengthWord, string word)
for(int k = 0; k < matrix[0].size() ; k++) // iterating for each column
for (int i = 0; i < matrix.size() - lengthWord + 1; i++) // for each row
char c;
string s = "";
for (int j = startIndex; j < startIndex + lengthWord; j++) // this startIndex is always 0
// but this for loop stands for iterating in a length of given word
c = matrix[i + j][k]; // adding given index of matrix to character c
s += c;
if (s == word) // if a specific word is founded
matrix[0].erase(matrix[0].begin() + k); // delete this column but not working correctly
cout << "Word is founded" << endl;
printMatrix(matrix); // And print it
谁能告诉我怎么了?
【问题讨论】:
【参考方案1】:您有一个行向量,因此要删除一列,您必须从每一行中删除一个字符。您可以编写一个循环来执行此操作。例如
for (int row = 0; row < matrix.size(); ++row)
matrix[row].erase(matrix[row].begin() + k);
编辑
所以你的代码最终应该是这样的
if (s == word) // if a specific word is founded
// delete a column
for (int row = 0; row < matrix.size(); ++row)
matrix[row].erase(matrix[row].begin() + k);
cout << "Word is founded" << endl;
printMatrix(matrix); // And print it
【讨论】:
对于我的例子,它会像这样 matrix[i].erase(matrix[i].begin()+k); i 是行号,k 是列索引,但它仍然给出相同类型的错误,打印输出只是删除单个列,其余部分相同 @Razbolt 你误解了我的回答。您需要将matrix[0].erase(matrix[0].begin() + k);
替换为我向您展示的循环。您需要在代码中添加一个新循环。
@Razbolt 您只删除了一个字符,因为您还没有编写新的循环。如果要删除一整列,则需要循环执行。
@Razbolt 我已经编辑了答案以准确显示我的意思。
哦,是的,我明白你的意思,现在如果我在列末尾的给定示例中写了 DMN,并且我在删除一行时遇到了这个问题,我得到了一个超出范围的问题向量订阅我找不到解决方法以上是关于如何删除 C++ 给定矩阵中的特定行和列?的主要内容,如果未能解决你的问题,请参考以下文章
R:如何在给定行和列标签以及二元运算符的情况下构造数据框/矩阵
确定是不是可以通过翻转 1 矩阵的行和列来达到给定二进制矩阵的算法