我使用数组来存储数据,但是我用vector替换了,所以我想用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 ++中实现
答案 0 :(得分:4)
有一个标准算法copy。它比memcpy更安全,因为它也适用于非POD类型。它有时针对POD类型进行优化以产生memcpy。您通常不使用标准算法的指针,但您必须使用迭代器。要获得迭代器,可以使用begin()
和end()
方法或自由函数。例如:
vector<int> a(10, 5);
vector<int> b(5);
copy(a.begin(), a.begin()+5, b.begin());
答案 1 :(得分:3)
好吧,std::vector
有原生operator=()
,可用于将一个矢量内容复制到另一个:
std::vector<T> x;
std::vector<T> y;
y = x;
还有std::copy
可以与迭代器一起使用,并允许复制数组切片。
答案 2 :(得分:3)
如果您从array
复制到vector
std::copy
或std::vector::assign
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));
}