我写了一个简单的程序,它访问一个名为“input.txt”的文件,并将其内容推送到字符串类型的向量中。
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
int main()
{
fstream input;
input.open("input.txt");
string s;
input >> s;
while (!input.eof())
{
cout << s <<endl;
input >> s;
vector<string> v;
v.push_back(s);
}
input.close();
}
我知道这不是最好的方法,但有没有办法让我可以访问这个向量并将其用作方程式?如果我想将矢量的所有元素添加到一起并找到总和?
答案 0 :(得分:4)
对于初学者来说,这里是你刚才编写的代码的更清晰版本:
ifstream input("input.txt");
string s;
while (input >> s) {
cout << s << endl;
vector<string> elems;
elems.push_back(s);
}
这使用ifstream
而不是fstream
,这似乎适用于此,因为您没有使用fstream
的写入工具。它还将读取逻辑与循环条件相结合,简化了何时继续的逻辑。
这段代码看起来很奇怪的一点是你已经确定了vector
的范围,以便它只能用于一次循环迭代。因此,每次迭代,您都会丢失所有旧的vector
内容。将其移出循环可能会解决这个问题:
ifstream input("input.txt");
vector<string> elems;
string s;
while (input >> s) {
cout << s << endl;
elems.push_back(s);
}
最后,如果你想循环遍历vector
将它们加在一起的元素,你可能不希望将文件作为字符串读取,而是作为int
s或{{ 1}}秒。这样可以省去以后必须转换值的麻烦。例如:
double
现在,您可以像这样添加所有值:
ifstream input("input.txt");
vector<double> elems;
double s;
while (input >> s) {
cout << s << endl;
elems.push_back(s);
}
或者,更好的是,您可以使用double total = 0.0;
for (int i = 0; i < elems.size(); ++i)
total += elems[i];
中的accumulate
算法将所有内容添加到一起:
<numeric>
希望这有帮助!
答案 1 :(得分:2)
您的计划不正确。你可能的意思是:
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
int main()
{
ifstream input("input.txt");
string s;
vector<string> v;
while (input >> s)
{
cout << s <<endl;
v.push_back(s);
}
}
此外,这是做同样事情的另一种方式:
#include<algorithm>
#include<iterator>
#include<fstream>
#include<string>
struct ShowAndCopy {
const std::string& operator()(const std::string& s) const {
std::cout << s;
return s;
}
};
int main()
{
std::ifstream input("input.txt");
std::vector<std::string> v;
std::transform(std::istream_iterator<std::string>(input),
std::istream_iterator<std::string>(),
std::back_inserter(v),
ShowAndCopy());
return 0;
}
答案 2 :(得分:0)
是的,您可以遍历字符串向量的内容,将值转换为整数或浮点值并对它们求和。