C++ 将二维字符串向量转换为二维整数向量c++;?
我从一个文件中读取一个矩阵,我将它读入一个字符串向量,这样我就可以保留文件中的前导0。现在我想在向量上应用一些数学运算,所以我想把它复制到一个2D int向量中。我对使用向量很陌生,我看到有几个1D向量的例子,但我对2D向量感到困惑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
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