簡體   English   中英

在C ++中訪問向量

[英]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的元素並將它們加在一起,則可能不想將文件讀取為字符串,而是將其讀取為intdouble 這樣可以省去以后轉換值的麻煩。 例如:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM