Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将二维字符串向量转换为二维整数向量c++;?_C++ - Fatal编程技术网

C++ 将二维字符串向量转换为二维整数向量c++;?

C++ 将二维字符串向量转换为二维整数向量c++;?,c++,C++,我从一个文件中读取一个矩阵,我将它读入一个字符串向量,这样我就可以保留文件中的前导0。现在我想在向量上应用一些数学运算,所以我想把它复制到一个2D int向量中。我对使用向量很陌生,我看到有几个1D向量的例子,但我对2D向量感到困惑 std::vector< std::vector<string> > data; std::vector< std::vector<int> > res; std::ifstream f("input.txt", io

我从一个文件中读取一个矩阵,我将它读入一个字符串向量,这样我就可以保留文件中的前导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);
}
编辑:

根据建议,我尝试使用transform函数,这就是我得到的结果:

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);
}
for(无符号整数i=0;i

但是我在这里得到了一个无效的auto error用法,我甚至不确定这是否适用于2D向量。

一个简单的解决方案是使用调用的lambda

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);
}
下面是一个例子:

#include <string>
#include <vector>
#include <algorithm>

int main() {
    std::vector<std::string> vs = {"123", "456", "789"};
    std::vector<int> vi;
    std::transform(vs.begin(), vs.end(),
        std:back_inserter(vi),
        [](const auto& element) { return std::stoi(element); });
// 'vi' now contains the integers 123, 456, 789
}
#包括
#包括
#包括
int main(){
向量vs={“123”、“456”、“789”};
std::向量vi;
std::transform(vs.begin(),vs.end(),
标准:背面插入器(vi),
[](const auto&element){return std::stoi(element);});
//“vi”现在包含整数123456789
}

没有看到您的输入数据,我可能已经关机了,但我会说,与其从
iss
读取字符串标记,不如读取数字<代码>int值;while(iss>>value){…}
我尝试了这个方法,但是在读取文件时我松开了前导的0。您希望将这些标记中的每一个都转换为四个数字吗?是的,这样我就可以访问向量,因为res[0][0]res[0][1]etcI看到了这个示例,但我不知道如何将其用于二维向量。@Ashwin Ramesh我发布的示例处理一维,我将另一个作为练习留给读者,但它很琐碎;只需在其周围环绕一个
for
循环,或者,另一个
转换
@Jesper Juhl,我对您的建议进行了编辑,您能检查一下代码吗?我得到了一个无效的“auto”用法@Ashwin Ramesh确保您编译为C++14