[英]Accessing Vectors In C++
我編寫了一個簡單的程序,該程序訪問一個名為“ 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();
}
我知道這不是執行此操作的最佳方法,但是有沒有一種方法可以訪問此向量並將其用於方程式? 假設我想將向量的所有元素加在一起並求和?
對於初學者來說,這是您剛剛編寫的代碼的簡潔得多的版本:
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
或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];
或者,甚至更好的是,您可以使用<numeric>
的accumulate
算法將所有內容加在一起:
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;
}
是的,您可以遍歷字符串向量的內容,將值轉換為整數或浮點值並求和。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.