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的主要内容,如果未能解决你的问题,请参考以下文章