c++ - 将二维向量传递给类
问题描述
这是我尝试将任意元素类型、内部和外部长度的 ND 向量传递给类并打印其内容。我知道有一些问题,但我无法解决。如何将任意内部向量长度分配给一个变量或一组变量?我试图将迭代器传递给构造函数并将它们分配给成员变量(传递和不传递向量),但这并没有成功。我知道有一些用于处理矩阵对象和其他问题的库可以解决与此处提出的问题类似的问题,但是,有一些独特/边缘场景构成了这个问题的动机。
#include <iostream>
#include <iterator>
#include <vector>
template <typename V, typename I>
class myVec{
private:
I rows;
I cols;
std::vector< std::vector<V> > vec( rows , vector<int> (cols));
public:
myVec(std::vector< std::vector<V> > const &myArr){
vec = myArr;
rows = myArr.size();
cols = myArr[].size();
}
void printVec(){
for(int i = 0; i < vec.size(); i++){
std::cout << "{";
for(int j = 0; j < vec[i].size(); j++){
std::cout << vec[i][j];
}
if (i < vec.size()){
std::cout << "}";
if (i < vec.size()-1){
std::cout << ",";
std::cout << " ";
}
}
}
std::cout << std::endl;
}
};
int main () {
std::vector< std::vector<int> > mainVec = {{1, 2, 4}, {5, 6, 7, 8}, {4, 3, 2, 1, 7}, {8, 7, 6, 5, 9, 3}};
myVec<int, int> vec1 = myVec<int, int>(mainVec);
vec1.printVec();
return 0;
解决方案
使用迭代器的基本解决方案,如先前为 print 方法建议的那样。向量由 const ref 传递,使用 move assign 代替有多大优势?此时不包括索引运算符重载和访问方法,计划包括对越界和其他情况的异常处理。
#include <iostream>
#include <vector>
template <typename V>
class myVec{
private:
std::vector< std::vector<V> > vec;
public:
myVec();
explicit myVec(const std::vector< std::vector<V> > &myArr):vec(myArr) {};
explicit myVec(std::vector< std::vector<V> > &&myArr):vec(std::move(myArr)) {};
}
void printVec(){
std::cout << '{';
for(auto& row:vec){
if(&row != &vec.front()) std::cout << ", ";
std::cout << '{';
if(auto cln = row.begin(); cln != row.end()) {
std::cout << *cln;
for(++cln; cln != row.end(); ++cln) std::cout << ", " << *cln;
}
std::cout << '}';
}
std::cout << '}' << std::endl;
}
};
int main () {
std::vector< std::vector<int> > mainVec = {{1, 2, 4}, {5, 6, 7, 8}, {4, 3, 2, 1, 7}, {8, 7, 6, 5, 9, 3}};
myVec<int, int> vec1 = myVec<int, int>(mainVec);
vec1.printVec();
return 0;
推荐阅读
- oracle - 是否可以使用 Oracle 创建 websocket 服务器?
- google-cloud-platform - 列出 GCP 共享 VPC 中的资源
- json - 当数组维度依赖于 Go 中相同 JSON 的其他字段时,如何解析 JSON?
- sas - 在SAS中按患者ID将二进制变量组合/折叠成单行
- java - 在 Linux 上的 websphere 应用程序服务器中更新未捆绑的 IBM java
- python - 为什么我的文本在屏幕上清晰显示时没有出现在 pygame 中?
- visual-studio - Advanced Installer v12.7.2 - 需要下载安装程序
- python - 将 pandas 数据帧从 1 小时更改为 5 分钟间隔
- php - php如何将csv字段读取为文本而不是数字
- r - R blastula 的 send_stmp 给出“邮件失败:451”