C++ 复制数组向量

C++ 复制数组向量,c++,C++,这可能太基本了,但我想问一下。我的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.inse

这可能太基本了,但我想问一下。我的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];
vectornewstart(5)//不必是5岁,不知道的事
插入(newStart.end(),start.begin(),start.end());
newStart[start.size()]=array[i];

然而,我的代码不能满足我的要求。这将向量一个添加到另一个的末端,并相应地进行新的赋值。正确的方法是什么?

C++向量不会在元素访问时自动调整大小(通过
操作符[]
at
方法)。将最后一行替换为

newStart.push_back(array[i]);

(前者效率更高,因为它不默认先初始化元素)

我相信java数组也不自动调整大小,所以我也不希望java代码能工作(但是它会给出异常,C++代码会让守护进程飞出你的鼻子或者其他编译器会想到的讨厌的东西)。


编辑:再次阅读问题,那里的代码实际上已经定义,但错误更多

vector<int> newStart(5);   //Doesnt have to be 5, sth not known
例如,让我们假设
start
包含
{1,2,3,4,5,6,7}

newStart.insert(newStart.end(), start.begin(), start.end());
vector::insert
添加新元素扩展数组并根据需要移动以下元素。插入在
end
之前,因此它将附加到向量,从而导致:

{0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7}
我认为这不是你想要的。看起来你想要一份《开始》。您只需通过复制构造创建:
vector newStart(start)

现在,
newStart
有最初的5个零和
start
中的元素,因此它的大小是
start.size()+5
,因此它确实有索引
start.size()
。这是从末尾算起的第五个元素。因此,根据上述示例,这将向量修改为:

{0, 0, 0, 0, 0, 1, 2, 1, 4, 5, 6, 7}
                      ^
要将开始[0]附加到结尾,请按照上面的说明使用
push_back



还记得,java数组是引用类型,赋值只是共享引用相同的数组,C++ C++是赋值时复制内容的值类型。

C++向量在元素访问中不自动调整大小(通过<代码>运算符[] /代码>也不<代码> < /Cord>方法)。将最后一行替换为

newStart.push_back(array[i]);

(前者效率更高,因为它不默认先初始化元素)

我相信java数组也不自动调整大小,所以我也不希望java代码能工作(但是它会给出异常,C++代码会让守护进程飞出你的鼻子或者其他编译器会想到的讨厌的东西)。


编辑:再次阅读问题,那里的代码实际上已经定义,但错误更多

vector<int> newStart(5);   //Doesnt have to be 5, sth not known
例如,让我们假设
start
包含
{1,2,3,4,5,6,7}

newStart.insert(newStart.end(), start.begin(), start.end());
vector::insert
添加新元素扩展数组并根据需要移动以下元素。插入在
end
之前,因此它将附加到向量,从而导致:

{0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7}
我认为这不是你想要的。看起来你想要一份《开始》。您只需通过复制构造创建:
vector newStart(start)

现在,
newStart
有最初的5个零和
start
中的元素,因此它的大小是
start.size()+5
,因此它确实有索引
start.size()
。这是从末尾算起的第五个元素。因此,根据上述示例,这将向量修改为:

{0, 0, 0, 0, 0, 1, 2, 1, 4, 5, 6, 7}
                      ^
要将开始[0]附加到结尾,请按照上面的说明使用
push_back


还记得java数组是引用类型,赋值只是共享引用同一个数组,但是C++向量是赋值复制内容的值类型。

试试:

for (std::vector<int>::iterator it = start.begin() ; it != start.end(); ++it) {
     newStart.push_back (*it);
}
for(std::vector::iterator it=start.begin();it!=start.end();+it){
newStart.push_back(*it);
}
试试这个:

for (std::vector<int>::iterator it = start.begin() ; it != start.end(); ++it) {
     newStart.push_back (*it);
}
for(std::vector::iterator it=start.begin();it!=start.end();+it){
newStart.push_back(*it);
}

> p>我对java和C++的混合有点困惑。希望下面的解释之一能有所帮助

如果你在C++中,vector有一个重载,所以你可以只输入< /p>

newvector=oldvector

它会复制的

如果您使用java,则可以使用ex:


Vector v2=新向量(v1) 

< P>我对java和C++的混合有点困惑。希望下面的解释之一能有所帮助

如果你在C++中,vector有一个重载,所以你可以只输入< /p>

newvector=oldvector

它会复制的

如果您使用java,则可以使用ex:

Vector v2=新向量(v1)

使用算法和迭代器

示例代码:

#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));
}
#包括
#包括
#包括
int main(){
std::向量src;
std::向量dest;
std::copy(src.begin(),src.end(),back_inserter(dest));
}
使用算法和迭代器

示例代码:

#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));
}
#包括
#包括
#包括
int main(){
std::向量src;
std::向量dest;
std::copy(src.begin(),src.end(),back_inserter(dest));
}

Erm,那Java代码还能工作吗?(无论如何:
vector newStart(开始);newStart.push_back(数组[i);
)你说“另一个数组的最新元素”但我在这里只看到一个名为
newStart
的数组。你没有说你的代码做什么或不做什么,我错过了将
newStart
初始化到给定大小的完全错误的初始化。这相当于
resize
,而不是
reserve
。呃,Java代码甚至可以工作吗?(无论如何:
vector newStart(start);newStart.push_back(array[i);
)您说“另一个数组的最新元素”,但我在这里只看到一个名为
newStart
的数组。您没有说您的代码做什么或不做什么,我不知道