将2D字符串向量转换为2D int向量c ++的最佳方法是什么?

时间:2017-11-14 05:51:37

标签: c++

我正在从文件中读取矩阵,我正在将其读入字符串向量,因此我可以保留文件中的前导0。现在我想对向量应用一些数学运算,所以我想将它复制到2D int向量中。我是新手使用矢量,我看到有一些1D矢量的例子,但我对2D矢量感到困惑。

std::vector< std::vector<string> > data;
std::vector< std::vector<int> > res;
std::ifstream f("input.txt", ios::binary);
std::string line;

while(std::getline(f,line))
{
  std::vector<string> line_data;
  std::istringstream iss(line);
  std::string value;
  while(iss >> value)
    {   
        line_data.push_back(value);
}
  data.push_back(line_data);
}

我上面的代码逐行读取文件,并将其写入名为data的2D字符串向量。我的目标是将2D数据向量复制到2D res向量,我该如何处理?

input.txt是一个方形布尔矩阵。 例如

0101
1010
1100
0001

编辑:

根据推荐,我尝试使用转换功能,这就是我所要做的:

for (unsigned int i = 0; i < data.size(); ++i)
{   std::vector<int> temp_data;

    std::transform(data[i].begin(), data[i].end(),
            std::back_inserter(temp_data),
            [](const auto& element) {   return std::stoi(element); });
    res.push_back(temp_data);
}

但是我在这里无效使用自动错误,我甚至不确定这是否适用于2D矢量。

1 个答案:

答案 0 :(得分:3)

一个简单的解决方案是使用std::transform和一个调用std::stoi的lambda。

以下是一个例子:

class SettingManage {
    fun addSetting(mMSetting:MSetting){
        DBSettingManage().addDBSetting(DbDataMapper().convertMSetting_To_DBSetting(mMSetting))
    }
}

class DBSettingManage(private val mDBSettingHelper: DBSettingHelper =DBSettingHelper.instance) {
    fun addDBSetting(mDBSetting: DBSetting)=mDBSettingHelper.use{
        insert(DBSettingTable.TableNAME,*mDBSetting.mMutableMap.toVarargArray())
    }
}

class DbDataMapper {
    fun convertMSetting_To_DBSetting(mMSetting: MSetting) =with(mMSetting){
        DBSetting(_id,name,createdDate,description)
    }
    fun convertDBSetting_To_MSetting(mDBSetting: DBSetting)=with(mDBSetting){
        MSetting(_id,name,createdDate,description )
    }
}


fun <T : Any> SelectQueryBuilder.parseList(parser: (Map<String, Any?>) -> T): List<T> =
        parseList(object : MapRowParser<T> {
            override fun parseRow(columns: Map<String, Any?>): T = parser(columns)
        })