Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将一个向量插入到一个特定位置的另一个向量中,这样我将得到一个两个向量的大向量,并且该位置将被覆盖?_C++_Vector_Visual Studio 2019_Shared Ptr_Unique Ptr - Fatal编程技术网

C++ 如何将一个向量插入到一个特定位置的另一个向量中,这样我将得到一个两个向量的大向量,并且该位置将被覆盖?

C++ 如何将一个向量插入到一个特定位置的另一个向量中,这样我将得到一个两个向量的大向量,并且该位置将被覆盖?,c++,vector,visual-studio-2019,shared-ptr,unique-ptr,C++,Vector,Visual Studio 2019,Shared Ptr,Unique Ptr,对于一个练习,我真的需要知道如何将一个向量插入另一个向量 以下是我需要的一个示例: //let's say i have these 2 vecs: vec1 = { 18, 192, 34}; vec2 = { 171, 11, 50, 6}; 我选择连接它们的点,比如说我选择VEC1 将向量2替换为向量2,如下所示: result_vec = { 171, vec1, 50, 6}; 因此,当我完成后,我将得到: result_vec = { 171, 18, 192, 34, 50,

对于一个练习,我真的需要知道如何将一个向量插入另一个向量

以下是我需要的一个示例:

//let's say i have these 2 vecs: 
vec1 = { 18, 192, 34};
vec2 = { 171, 11, 50, 6};
我选择连接它们的点,比如说我选择VEC1 将向量2替换为向量2,如下所示:

result_vec = { 171, vec1, 50, 6};
因此,当我完成后,我将得到:

result_vec = { 171, 18, 192, 34, 50, 6};
对我来说,看到两个例子会更好,一个简单的例子和另一个带有智能指针的例子,比如shared_ptr或unique_ptr


谢谢

有时浏览一些参考资料并查看容器提供的方法会有所帮助。大多数情况下,你会发现有一种方法可以做你想做的事情。在这种情况下,它是过载4。要删除该位置的旧图元,可以使用:

我以另一种方式插入,但应该很容易调整。同样,对智能指针执行相同操作不需要使用不同的算法/方法。如果要保留原始向量,只需在插入前复制一份即可


PS:我首先误读了问题,错过了删除插入位置元素的部分。我的固定解决方案不是最有效的,因为插入和删除旧元素可以一次性完成。然而,对于不太大的矢量,效率上的差异可能可以忽略不计

有时浏览一些参考资料并查看容器提供的方法会有所帮助。大多数情况下,你会发现有一种方法可以做你想做的事情。在这种情况下,它是过载4。要删除该位置的旧图元,可以使用:

我以另一种方式插入,但应该很容易调整。同样,对智能指针执行相同操作不需要使用不同的算法/方法。如果要保留原始向量,只需在插入前复制一份即可


PS:我首先误读了问题,错过了删除插入位置元素的部分。我的固定解决方案不是最有效的,因为插入和删除旧元素可以一次性完成。然而,对于不太大的矢量,效率上的差异可能可以忽略不计

似乎要用一个向量的一个元素替换另一个向量的元素。如果是这样,那么您可以编写一个类似于演示程序中所示的函数

#include <iostream>
#include <vector>
#include <iterator>

template <typename T>
std::vector<T> & replace( std::vector<T> &v1, 
                          typename std::vector<T>::size_type pos,
                          const std::vector<T> &v2 )
{
    if ( not ( pos < v1.size() ) )
    {
        v1.insert( std::end( v1 ), std::begin( v2 ), std::end( v2 ) );
    }
    else
    {
        v1.insert( v1.erase( std::next( v1.begin(), pos ) ),
                   std::begin( v2 ), std::end( v2 ) );
    }

    return v1;
}                          

int main() 
{
    std::vector<int> v1 = { 171, 11, 50, 6 };
    std::vector<int> v2 = { 18, 192, 34 };

    for ( const auto &item : replace( v1, 1, v2 ) ) std::cout << item << ' ';
    std::cout << '\n';

    return 0;
}

似乎您想用一个向量的一个元素替换另一个向量的元素。如果是这样,那么您可以编写一个类似于演示程序中所示的函数

#include <iostream>
#include <vector>
#include <iterator>

template <typename T>
std::vector<T> & replace( std::vector<T> &v1, 
                          typename std::vector<T>::size_type pos,
                          const std::vector<T> &v2 )
{
    if ( not ( pos < v1.size() ) )
    {
        v1.insert( std::end( v1 ), std::begin( v2 ), std::end( v2 ) );
    }
    else
    {
        v1.insert( v1.erase( std::next( v1.begin(), pos ) ),
                   std::begin( v2 ), std::end( v2 ) );
    }

    return v1;
}                          

int main() 
{
    std::vector<int> v1 = { 171, 11, 50, 6 };
    std::vector<int> v2 = { 18, 192, 34 };

    for ( const auto &item : replace( v1, 1, v2 ) ) std::cout << item << ' ';
    std::cout << '\n';

    return 0;
}

我不认为共享的prt和唯一的ptr与您的问题相关,标签可以删除。如果你对使用智能指针的代码有问题,你应该显示出来。我不认为共享的prt和唯一的ptr与你的问题相关,标签可以删除。如果你对使用智能指针的代码有问题,你应该表现出好像我误读了这个问题,+1比我更专注;谢谢你们两个!似乎我误读了这个问题,+1比我更专注;谢谢你们两个!是的,但它能与像unique和shared ptr这样的智能指针一起工作吗?是的,但它能与像unique和shared ptr这样的智能指针一起工作吗?
#include <iostream>
#include <vector>
#include <iterator>

template <typename T>
std::vector<T> & replace( std::vector<T> &v1, 
                          typename std::vector<T>::size_type pos,
                          const std::vector<T> &v2 )
{
    if ( not ( pos < v1.size() ) )
    {
        v1.insert( std::end( v1 ), std::begin( v2 ), std::end( v2 ) );
    }
    else
    {
        v1.insert( v1.erase( std::next( v1.begin(), pos ) ),
                   std::begin( v2 ), std::end( v2 ) );
    }

    return v1;
}                          

int main() 
{
    std::vector<int> v1 = { 171, 11, 50, 6 };
    std::vector<int> v2 = { 18, 192, 34 };

    for ( const auto &item : replace( v1, 1, v2 ) ) std::cout << item << ' ';
    std::cout << '\n';

    return 0;
}
171 18 192 34 50 6