C++ 创建 2d 矢量错误消息 C26444

Posted

技术标签:

【中文标题】C++ 创建 2d 矢量错误消息 C26444【英文标题】:C++ creating 2d vector error message 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,而不是? 【参考方案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;


【讨论】:

以上是关于C++ 创建 2d 矢量错误消息 C26444的主要内容,如果未能解决你的问题,请参考以下文章

无法获得简单的 2D 着色器以在 C++ openGL 中绘制红色三角形(无编译器错误)

矢量下标超出范围错误消息 3

C++ 3D 矢量模板

OpenCv2.2 C++ filter2D

矢量:内存范围错误

制作2d矢量和列表的不同方法