如何删除 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:如何在给定行和列标签以及二元运算符的情况下构造数据框/矩阵

读取特定的行和列 C++

确定是不是可以通过翻转 1 矩阵的行和列来达到给定二进制矩阵的算法

根据行和列对矩阵中的所有元素进行排名

b_lc_给定行和列的和求可行矩阵(找行和列的和的最小值填)

检查给定行和列总和是不是只有 2 行的二进制矩阵