访问C++中的向量
问题描述:
我写了一个简单的程序,用于访问名为“input.txt”的文件,并将其内容推送到字符串类型的向量中。访问C++中的向量
#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();
}
我知道这是不是要做到这一点的最好办法,但有什么办法,我可以再访问这个载体,用它的公式?说如果我想将矢量的所有元素加在一起并找出总和?
答
对于初学者来说,这里的代码更清洁的版本,你刚刚写:
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或double
s。这为您节省了后来必须转换值的麻烦。例如:
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>
添加的一切:
double total = accumulate(elems.begin(), elems.end(), 0.0);
希望这有助于!
答
是的,你可以迭代字符串矢量的内容,将值转换为整数或浮点值并将它们相加。
答
你的程序不正确。你大概意思是这样的:
#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;
}
你的代码不正确。特别是循环。 – wilhelmtell 2011-01-26 06:24:55
看到这个为什么你的循环是错误的:http://*.com/questions/4258887/semantics-of-flags-on-basic-ios – GManNickG 2011-01-26 06:38:29