Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 二维向量矩阵加法 向量AsumB( int kolumny,向量矩阵1,向量矩阵2){ 向量矩阵(kolumny); 矩阵=向量(matrix1.size()); 对于(int i=0;i_C++ - Fatal编程技术网

C++ 二维向量矩阵加法 向量AsumB( int kolumny,向量矩阵1,向量矩阵2){ 向量矩阵(kolumny); 矩阵=向量(matrix1.size()); 对于(int i=0;i

C++ 二维向量矩阵加法 向量AsumB( int kolumny,向量矩阵1,向量矩阵2){ 向量矩阵(kolumny); 矩阵=向量(matrix1.size()); 对于(int i=0;i,c++,C++,vector<vector<int>> AsumB( int kolumny, vector<vector<int>> matrix1, vector<vector<int>> matrix2) { vector<vector<int>>matrix(kolumny); matrix = vector<vector<int>>(matrix1.size(

vector<vector<int>> AsumB(
    int kolumny, vector<vector<int>> matrix1, vector<vector<int>> matrix2) {
    vector<vector<int>>matrix(kolumny);
    matrix = vector<vector<int>>(matrix1.size());
    for (int i = 0; i < kolumny; ++i)
        for (int j = 0; i <(static_cast<signed int>(matrix1.size())); ++i)
            matrix[i][j] = matrix1[i][j] + matrix2[i][j];

     return matrix;
}
向量AsumB(向量常量和矩阵1,
向量常数和矩阵(x2){
向量矩阵(matrix1);
对于(std::size_t i=0U;i

无法复制,并且OP报告的编译器错误看起来与代码不匹配,因此问题可能在其他地方

然而,这里有很多错误,可能会导致各种各样的不好的问题,应该加以解决。我冒昧地重新格式化了代码,以使解释更容易

vector<vector<int>> AsumB(vector<vector<int>> const & matrix1,
                          vector<vector<int>> const & matrix2) {
    vector<vector<int>> matrix(matrix1);
    for (std::size_t i = 0U; i < matrix.size(); ++i)
        for (std::size_t j = 0U; j < matrix[j].size(); ++j)
            matrix[i][j] += matrix2[i][j];

    return matrix;
}
声明一个
向量
向量
,外部
向量
大小为
kolumny
。没有分配内部
向量
,因此2D操作注定失败

{
    vector<vector<int>> matrix(kolumny);
i
j
永远不应该变为负值(如果它们变为负值,则会产生巨大的逻辑问题),因此请使用无符号类型。使用正确的无符号类型,则
静态转换
毫无意义

此外,
循环的内部
增量和测试
i
,而不是
j

    for (int i = 0; i < kolumny; ++i)
        for (int j = 0; i < (static_cast<signed int>(matrix1.size())); ++i)
除了
matrix
没有索引
j
之外,我看这里没有什么错误。这将导致as访问越界

            matrix[i][j] = matrix1[i][j] + matrix2[i][j];
清理此文件,使其符合逻辑:

    return matrix;
}
size\t
是一种无符号数据类型,保证足够大,可以索引任何可表示的对象。它将足够大,并且您不必担心讨厌的负数。还消除了以后进行任何强制转换的需要

{
    size_t row = matrix1.size();
DOW与上面的相同,但确保列的数量有意义

    size_t column = matrix1[0].size();
    if (!(column > 0 && column == matrix2[0].size()))
    {
        return  vector<vector<int>>();
    }
这里我们简化了一些循环,因为我们知道所有的大小

    for (int i = 0; i < row; ++i)
    {
        for (int j = 0; j < column; ++j)
        {
编译器有许多技巧可以用来消除返回时的复制矩阵。如果您想了解更多信息,请使用首选的web搜索引擎查找返回值优化。 }

总而言之:

            matrix[i][j] = matrix1[i][j] + matrix2[i][j];
        }
    }

    return matrix;
向量AsumB(常量向量和矩阵1,
常数向量和矩阵(x2)
{
行大小=矩阵1.size();
如果(!(行>0&&row==matrix2.size())
{
返回向量();
}
size_t column=matrix1[0]。size();
如果(!(列>0&&column==matrix2[0].size())
{
返回向量();
}
向量矩阵(行、向量(列));
对于(int i=0;i
问题出在哪里?严重性代码描述项目文件行抑制状态错误(活动)没有合适的用户定义从“std:\u Vector\u iterator”到“std:\u Vector\u iterator”的转换存在lab4@CezaryCzekalski该错误出现在哪一行?如果您可以将其添加到问题中,这可能会使问题变得更清楚。请保存一点代码并按值传入
matrix1
。让编译器为您复制。
    if (!(row > 0 && row == matrix2.size()))
    {
        return  vector<vector<int>>();
    }
    size_t column = matrix1[0].size();
    if (!(column > 0 && column == matrix2[0].size()))
    {
        return  vector<vector<int>>();
    }
    vector<vector<int>> matrix(row, vector<int>(column));
    for (int i = 0; i < row; ++i)
    {
        for (int j = 0; j < column; ++j)
        {
            matrix[i][j] = matrix1[i][j] + matrix2[i][j];
        }
    }

    return matrix;
vector<vector<int>> AsumB(const vector<vector<int>> & matrix1,
                          const vector<vector<int>> & matrix2)
{
    size_t row = matrix1.size();
    if (!(row > 0 && row == matrix2.size()))
    {
        return  vector<vector<int>>();
    }
    size_t column = matrix1[0].size();
    if (!(column > 0 && column == matrix2[0].size()))
    {
        return  vector<vector<int>>();
    }
    vector<vector<int>> matrix(row, vector<int>(column));

    for (int i = 0; i < row; ++i)
    {
        for (int j = 0; j < column; ++j)
        {
            matrix[i][j] = matrix1[i][j] + matrix2[i][j];
        }
    }

    return matrix;
}