【问题标题】:C++ creating 2d vector error message C26444C++ 创建 2d 矢量错误消息 C26444
【发布时间】:2019-11-16 12:43:29
【问题描述】:

使用此代码,我收到错误消息 C26444:避免使用自定义构造和销毁 (es.84) 的未命名对象。 我搜索了这个,但找不到适合我的案例的任何正确答案。 提前致谢。

#include <iostream>
#include <vector>

vector<vector<int>> create2dVector(const size_t size1, const size_t size2, const int value) noexcept {
    vector<vector<int>> v(size1, vector<int> (size2));
    for (size_t i = 0; i < size1; i++) {
        for (size_t j = 0; j < size2; j++) {
            v[i][j] = value;
        }
    }
    return v;
}

int main() {
    create2dVector(2, 5, 10);
    return 0;
}

【问题讨论】:

  • 你用的是什么编译器?我用g++ 7.4.0编译了你的代码,没问题
  • @eMKa 写 auto v = create2dVector(2, 5, 10);
  • 为什么是下标而不是迭代器。 ?
  • C++ 中没有所谓的“向量”。也许您打算写 std::vector,而不是?

标签: c++ vector 2d 2d-vector error-messaging


【解决方案1】:

虽然我建议您对容器使用迭代器,但这里的代码没有错误。如果您使用 C++,请尝试使用 C++。

#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> create2dVector(const size_t , const size_t , const int );
vector<vector<int>> create2dVector(const size_t size1, const size_t size2, const int value)
{
    vector<vector<int> > v( size1 , vector<int> (size2));
    for (int i = 0; i < int(size1); i++) {
        for (int j = 0; j < int(size2); j++){
            v[i][j] = value;
        }
    }

    return v;
}
int main() {
    auto v = create2dVector(2, 5, 10);
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 5; j++){
            cout<< v[i][j]<< " ";
        }
        cout<< "\n";
    }

    return 0;
}

这是我推荐的方式。

#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> create2dVector(const size_t , const size_t , const int );
vector<vector<int>> create2dVector(const size_t size1, const size_t size2, const int value)
{
    vector<vector<int> > v( size1 , vector<int>(size2));
    for(auto i = v.begin() ; i != v.end() ;++i)
    {
        vector<int>p;
        for(int j=0;j<int(size2);++j)
        {
            p.push_back(value);
        }
        *i = p;
    }
    return v;
}
int main() {
    auto v = create2dVector(2, 5, 10);
    for(auto i : v)
    {
        for(auto j : i)
            cout<< j<<" ";
    }

    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 2014-05-19
    • 2013-10-15
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 2012-03-25
    相关资源
    最近更新 更多