6

我使用数组来存储数据,但是我用向量替换了,所以我想用 c++ 运算符替换所有 c 运算符。我使用 memcpy 复制一个内存块

for (i = 0; i < rows_; i++)
    memcpy((T *) &tmp.data_[cols_ * i], (T *) &a.data_[cols_ * (2 * i + 1)], rows_ * sizeof(T));

它也适用于向量,我只想知道 c++ 中是否有等效函数?

我尝试了副本:

std::copy(tmp.data_[cols_ * i], tmp.data_[cols_ * i+rows], a.data_[cols_ * (2 * i + 1)]);

但我收到以下错误:

error: invalid use of member function (did you forget the ‘()’ ?)

例如:

我有一个 2xnxn 大小的数组,我正在使用 for 循环来制作一个 nxn 数组。例如我有 1 2 3 4 5 6 7 8,我的新数组必须如下:3 4 7 8。我使用 memcpy 来实现这一点,但我不知道如何在 C++ 中实现

4

3 回答 3

4

有一个标准的算法副本。它比 memcpy 更安全,因为它也适用于非 POD 类型。它有时会针对 POD 类型进行优化以生成 memcpy。您通常不会将指针与标准算法一起使用,但您必须使用迭代器。要获得迭代器,您可以使用begin()end()方法或自由函数。例子:

vector<int> a(10, 5);
vector<int> b(5);

copy(a.begin(), a.begin()+5, b.begin());
于 2012-11-26T07:34:01.247 回答
3

好吧,std::vector有本机operator=(),可用于将一个矢量内容复制到另一个:

std::vector<T> x;
std::vector<T> y;
y = x;

还有std::copy一个适用于迭代器并允许复制数组切片。

于 2012-11-26T07:35:24.723 回答
3

使用std::copy或者std::vector::assign如果您从 复制arrayvector

  int from_array[10] = {1,2,3,4,5,6,7,8,9,10};

  std::vector<int> to_vector;

  int array_len = sizeof(from_array)/sizeof(int);
  to_vector.reserve(array_len);
  std::copy( from_array, from_array+10, std::back_inserter(to_vector)); 
  or C++11
  std::copy( std::begin(from_array), std::end(from_array), std::back_inserter(to_vector));   

  std::vector<int> to_vector2;
  to_vector2.reserve(array_len);
  to_vector2.assign(from_array, from_array + array_len);

如果从向量复制到向量

   std::vector<int> v1;
   std::vector<int> v2;
   v2 = v1; // assign operator = should work

如果您不需要保留 v1,std::swap也可以

v2.swap(v1);

更新:

  const int M = 2;
  const int N = 4;
  int from_array[M][N] = {{1,2,3,4},{5,6,7,8}};

  std::vector<int> to_vector;
  to_vector.reserve(N);
  int start=2;
  int end = 4;
  for (int i=0; i<M; i++)
  {
    std::copy( from_array[i]+start, from_array[i]+end, std::back_inserter(to_vector)); 
  }
于 2012-11-26T07:54:48.497 回答