c++ - 在 C++ 中访问 vector

标签 c++ vector

我编写了一个简单的程序来访问名为“input.txt”的文件并将其内容推送到字符串类型的 vector 中。

#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();

}

我知道这不是执行此操作的最佳方法,但有没有一种方法可以让我访问此 vector 并将其用于方程式?假设我想将 vector 的所有元素加在一起并求和?

最佳答案

对于初学者,这是您刚刚编写的代码的更简洁的版本:

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秒。这为您省去了以后必须转换值的麻烦。例如:

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);

希望这对您有所帮助!

关于c++ - 在 C++ 中访问 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4801849/

相关文章:

c++ - 什么是 undefined reference /未解析的外部符号错误以及如何修复它?

c++ - 大括号封闭的初始化列表?转换为 vector

c++ - 通过id实现hash_map & vector的遍历和访问

java - Vector 类 java 的 indexOf 方法需要清晰

c++ - 在c++中仅重新堆放一个元素

c++ - 错误 : request for member 'display' in 'square' , 属于非类类型 'GameBoxes::Box<double>()'

python - 在 Cython 中包装返回复杂类型 Vector 的函数

C++ (Qt) 自定义对象的最大 vector 大小

c++ - 文件大小方法 boost 库奇怪

c++ - Googletest 不接受 EXPECT_THROW 中的临时对象