首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将向量拆分为两个较小数组的最佳方法?

将向量拆分为两个较小数组的最佳方法?
EN

Stack Overflow用户
提问于 2012-03-22 03:08:07
回答 4查看 75.1K关注 0票数 32

我正在尝试做什么:

我正在尝试将一个向量拆分为两个独立的数组。当前的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;
}

谢谢您:)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-22 03:14:20

使用迭代器。

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

由于迭代器范围表示半个开放范围向量,因此不需要向第二个开始迭代器添加1:lines.begin() + half_size不会复制到第一个[begin, end)

注意,像这样的东西

int split = lines.size() / 2;
int arrayA[split];
int arrayB[split];

不是标准的C++ (因此不是可移植的)。这些是所谓的可变长度数组(简称VLA),并且是C99的东西。一些编译器在编译C++代码时将它们作为扩展(GCC,Clang)。请始终使用-pedantic进行编译,以获得警告。这些VLA对于非POD类型很奇怪,通常没有什么用处,因为您甚至不能返回它们。

票数 68
EN

Stack Overflow用户

发布于 2016-03-09 19:44:12

如果由于严格编译器规则而不能使用Xeo answer中的代码,或者您希望使用更通用的方式,请尝试使用std::advance

#include <vector>
#include <iterator>

size_t middle = input.size()/2;
std::vector<int>::const_iterator middleIter(input.cbegin());
std::advance(middleIter, middle);

std::vector<int> leftHalf(input.begin(), middleIter);
std::vector<int> rightHalf(middleIter, input.end());
票数 3
EN

Stack Overflow用户

发布于 2012-03-22 04:04:43

如果您只需要引用数字,而不需要对它们进行操作,那么您可以这样做:

int *array_1 = &lines[0];
int *array_2 = &lines[lines.size() / 2];

array_1和array_2实际上是指向向量的开始和中间的指针。这是因为STL保证向量将它们的元素存储在连续的内存中。请注意,引用lines.begin()不能用于此目的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9811235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档