复制阵列矢量
Copy arrays-vectors
这可能太基本了,但我想问一下。我的Java代码将start
数组复制到newStart
,并将最后一个元素分配给另一个数组。
int[] newStart= Arrays.copyOf(start, start.length + 1);
newStart[start.length] = array[i];
我将其转换为我的C++版本,矢量为:
vector<int> newStart(5); //Doesnt have to be 5, sth not known
newStart.insert(newStart.end(), start.begin(), start.end());
newStart[start.size()] = array[i];
但是,我的代码不能满足我的要求。这会将矢量一个添加到另一端,并相应地进行新的赋值。正确的方法是什么?
C++向量在元素访问时不会自动调整大小(通过operator[]
或at
方法)。用任一替换最后一行
newStart.push_back(array[i]);
或
newStart.resize(start.size() + 1);
newStart[start.size()] = array[i];
(前者效率更高,因为它不会默认首先初始化元素)
我相信Java数组也不会自动调整大小,所以我不希望Java代码也能正常工作(但它会出现异常,而C++代码会让守护进程飞出你的鼻子或编译器会想到的任何其他讨厌的东西)。
编辑:再读一遍问题,那里的代码其实已经定义好了,但更错了。
vector<int> newStart(5); //Doesnt have to be 5, sth not known
该语句实际上创建了一个向量,该向量包含5个(或任何)默认初始化的元素,在int
的情况下,该元素为0。所以现在你有了
{0, 0, 0, 0, 0}
为了举例说明,假设start
包含{1, 2, 3, 4, 5, 6, 7}
。
newStart.insert(newStart.end(), start.begin(), start.end());
CCD_ 8添加了扩展阵列的新元素,并根据需要移动以下元素。插入位于end
之前,因此它将附加到矢量上,结果为:
{0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7}
我不认为这是你想要的。看起来你想要一份start的副本。您只需通过复制构造创建:vector<int> newStart(start)
。
newStart[start.size()] = array[i];
现在newStart
有最初的5个零和来自start
的元素,所以它的大小是start.size() + 5
,因此它确实有索引start.size()
。它是从末尾开始的第5个元素。因此,根据上面的例子,这将把矢量修改为:
{0, 0, 0, 0, 0, 1, 2, 1, 4, 5, 6, 7}
^
要将start[0]附加到末尾,请按照上面的说明使用push_back
。
还要记住,Java数组是引用类型,其中赋值只是共享对同一数组的引用,但C++向量是在赋值时复制内容的值类型。
Java和C++的混合让我有点困惑。希望下面的解释能有所帮助。
如果您在C++中,vector有一个重载运算符=,所以您可以只键入
newvector = oldvector;
它会复制。
如果你在java中,你可以使用复制构造函数ex:
Vector v2 = new Vector(v1);
试试这个:
for (std::vector<int>::iterator it = start.begin() ; it != start.end(); ++it) {
newStart.push_back (*it);
}
使用std::copy算法和back_inserter迭代器。
样本代码:
#include <iterator>
#include <vector>
#include <algorithm>
int main () {
std::vector<int> src;
std::vector<int> dest;
std::copy(src.begin(),src.end(),back_inserter(dest));
}
- 内存C++复制是否将内存地址复制到另一个阵列
- 比strncpy更好地复制字符阵列的部分方法
- 复制到新阵列时出现动态内存分配问题
- 阵列操作,复制最后一个元素
- 问题将信息复制到指针阵列中
- 使用std ::复制复制阵列时获取细分故障
- 如何将 HDC 位图快速复制到三维阵列?
- 从 C 数组进行 STL 阵列,无需复制
- 如何复制包含非原始类型的阵列
- 快速复制数组到阵列
- C 2D char阵列有时会在随机位置复制数据
- C++将 2D 阵列的一部分复制到另一个 2D 阵列,性能
- std ::类似阵列的类复制构造函数
- 复制动态阵列并使用过载的操作员删除原件
- 对于阵列复制,const&的性能更好吗?
- 复制二维阵列C++
- 如何在Cuda中将2D阵列从设备复制到主机
- 当阵列需要复制回主机时,如何避免同步
- 复制阵列并清理
- 将动态分配的阵列复制到更大的阵列,而不会发生内存泄漏