首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vector resize()自动填充

vector resize()自动填充
EN

Stack Overflow用户
提问于 2010-10-06 01:38:54
回答 3查看 12.6K关注 0票数 4

我正在编写一个类,它包含一个矩阵(双值),表示为vector<vector<double>>

我想实现operator=,用给定稀疏矩阵的细节重新填充我的矩阵。我正在编写以下代码:

代码语言:javascript
复制
RegMatrix& RegMatrix::operator=(const SparseMatrix rhs){
    if(*this != rhs){
        _matrix.clear();
        _matrix.resize(rhs.getRow());
        int i;
        for(i=0;i<rhs.getRow();++i){
            _matrix.at(i).resize(rhs.getCol());
        }

        for(i=0;i<rhs.getSize();++i){
            Element e = rhs.getElement(i);
            _matrix[e._row][e._col] = e._val; 
        }
    }

    return *this;
}

resize()方法会自动用零填充向量吗?我的实现正常吗?

EN

回答 3

Stack Overflow用户

发布于 2010-10-06 01:40:47

新元素采用vector成员的默认值,如果使用带有两个参数的resize重载,则采用特定值。

代码语言:javascript
复制
void resize(
   size_type _Newsize,
   Type _Val
);

在你的例子中,缺省值将是一个空的vector<double> -如果这不是你想要的,把你想放在那里的东西传递给上面的重载。

不会修改现有元素。

票数 5
EN

Stack Overflow用户

发布于 2010-10-06 02:06:48

如果想要将整个2d数组置零,可以使用assign function of vector

代码语言:javascript
复制
v.assign(size, vector<double>(size, 0.));

这将使sizeXsize的2d向量填充为零。

在您的案例中:

代码语言:javascript
复制
RegMatrix& RegMatrix::operator=(const SparseMatrix rhs){
    if(*this != rhs){
        _matrix.assign(rhs.getRow(), vector<double>(rhs.getCol(), 0.));

        for(i=0;i<rhs.getSize();++i){
            Element e = rhs.getElement(i);
            _matrix[e._row][e._col] = e._val; 
        }
    }

    return *this;
}
票数 3
EN

Stack Overflow用户

发布于 2010-10-06 01:58:53

没有一个std::vector<>方法会在内部使用任何形式的默认初始化。std::vector<>只要求它的元素是CopyConstructible和可赋值的,但不要求它们是DefaultConstructible。每当您遇到某些元素似乎是“无中生有”构造的情况(就像您的resize调用一样),这通常意味着您正在使用的std::vector<>方法有一个额外的参数,它允许您传递将从中复制构造新元素的值。我们通常不会注意到这一点,因为这些参数总是以与相应类型的()-initailized元素相等的默认值提供。

在您的示例中,

代码语言:javascript
复制
_matrix.at(i).resize(rhs.getCol());

实际上被翻译成

代码语言:javascript
复制
_matrix.at(i).resize(rhs.getCol(), double());

调用,这意味着在形式上是您隐式地传递新元素的初始值。

double()的计算结果为零,所以是的,列向量最初将用零填充。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3866202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档