mig*_*db1 24 c++ split fstream stdvector
我正在做的事情:
我试图将一个矢量分成两个独立的数组.当前int向量包含文本文件中每行的元素.文本文件是随机整数列表.
我打算怎么做:
我目前的想法是创建两个常规int数组,然后迭代整个向量并将n/2个元素复制到每个数组.
我想知道的是:
完成任务的最优雅方式是什么?我有一种感觉,我可以做到这一点,而无需多次迭代矢量.
码:
#include <vector>
#include <fstream>
#include <iterator>
#include <iostream>
using namespace std;
vector<int> ifstream_lines(ifstream& fs)
{
vector<int> out;
int temp;
while(fs >> temp)
{
out.push_back(temp);
}
return out;
}
vector<int> MergeSort(vector<int>& lines)
{
int split = lines.size() / 2;
int arrayA[split];
int arrayB[split];
}
int main(void)
{
ifstream fs("textfile.txt");
vector<int> lines;
lines = ifstream_lines(fs);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
谢谢 :)
Xeo*_*Xeo 60
使用迭代器.
std::vector<int> lines;
// fill
std::size_t const half_size = lines.size() / 2;
std::vector<int> split_lo(lines.begin(), lines.begin() + half_size);
std::vector<int> split_hi(lines.begin() + half_size, lines.end());
Run Code Online (Sandbox Code Playgroud)
由于迭代器范围表示半开放范围[begin, end),因此不需要向第二个开始迭代器添加1:lines.begin() + half_size不会复制到第一个向量.
注意事情就好
int split = lines.size() / 2;
int arrayA[split];
int arrayB[split];
Run Code Online (Sandbox Code Playgroud)
不是标准的C++(因此不是可移植的).这些是所谓的可变长度数组(简称VLA),是C99的东西.一些编译器在编译C++代码(GCC,Clang)时将它们作为扩展.始终编译-pedantic以获得警告.这些VLA对非POD类型起作用,并且通常不常用,因为您甚至无法返回它们.