C++ 使用每个元素的重复条目创建一个向量

C++ 使用每个元素的重复条目创建一个向量,c++,C++,我想通过将每个条目重复三次来展开给定的向量。例如,如果向量是[5,7]。输出向量应为[5 5 7 7] #include<iostream.h> #include<vector.h> int main(void) { std::vector<int> x; x.push_back(5); x.push_back(7); x.insert(x.end(), x.begin(), x.begin() + 1); return 0; }

我想通过将每个条目重复三次来展开给定的向量。例如,如果向量是
[5,7]
。输出向量应为
[5 5 7 7]

#include<iostream.h>
#include<vector.h>

int main(void)
{
   std::vector<int> x;
   x.push_back(5);
   x.push_back(7);
   x.insert(x.end(), x.begin(), x.begin() + 1);

return 0;
}
#包括
#包括
内部主(空)
{
std::向量x;
x、 推回(5);
x、 推回(7);
x、 插入(x.end(),x.begin(),x.begin()+1);
返回0;
}

这没有成功。任何帮助都将不胜感激。

我不知道您想要的代码有多简单,但举个例子,这是可行的

#include<iostream>
#include<vector>

int main(void)
{
   std::vector<int> x;
   x.push_back(5);
   x.push_back(7);
   for (std::vector<int>::iterator it = x.end(); it != x.begin(); )
   {
      it--;
      it = x.insert(it, 2, *it);
   }

   // print the vector to check
   for (size_t i = 0; i < x.size(); i++) std::cout << x[i] << " ";
   std::cout << std::endl;

   return 0;
}
#包括
#包括
内部主(空)
{
std::向量x;
x、 推回(5);
x、 推回(7);
for(std::vector::iterator it=x.end();it!=x.begin();)
{
它--;
it=x.插入(it,2,*it);
}
//打印要检查的向量

对于(size_t i=0;i
#include<iostream>
#include<vector>

int main(void)
{
   std::vector<int> x;
   x.push_back(5);
   x.push_back(7);
   for (std::vector<int>::iterator it = x.end(); it != x.begin(); )
   {
      it--;
      it = x.insert(it, 2, *it);
   }

   // print the vector to check
   for (size_t i = 0; i < x.size(); i++) std::cout << x[i] << " ";
   std::cout << std::endl;

   return 0;
}
#包括
#包括
内部主(空)
{
std::向量x;
x、 推回(5);
x、 推回(7);
for(std::vector::iterator it=x.end();it!=x.begin();)
{
它--;
it=x.插入(it,2,*it);
}
//打印要检查的向量

对于(size_t i=0;i
std::vector<int> vec{5, 7};

// create a new vector
std::vector<int> new_vec;
new_vec.reserve(vec.size() * 3);

for (auto elem : vec) {
    for (std::size_t i = 0; i < 3; ++i) {
        new_vec.push_back(elem);
    }
}
std::向量向量{5,7};
//创建一个新的向量
std::vector new_vec;
新的向量保留(向量大小()*3);
用于(自动元素:vec){
对于(标准::尺寸\u t i=0;i<3;++i){
新矢量推回(elem);
}
}

一种简单的方法是在向量上循环并创建一个新的向量:

std::vector<int> vec{5, 7};

// create a new vector
std::vector<int> new_vec;
new_vec.reserve(vec.size() * 3);

for (auto elem : vec) {
    for (std::size_t i = 0; i < 3; ++i) {
        new_vec.push_back(elem);
    }
}
std::向量向量{5,7};
//创建一个新的向量
std::vector new_vec;
新的向量保留(向量大小()*3);
用于(自动元素:vec){
对于(标准::尺寸\u t i=0;i<3;++i){
新矢量推回(elem);
}
}

也许类似的东西可以帮助您实现这一目标:

#include <iostream>
#include <algorithm>
#include <vector>

template<typename T>
std::vector<T> RepeateEntryNumberOfTimes(std::vector<T> input, std::uint16_t numberOfTimes)
{
    std::vector<T> result;

    std::for_each(input.begin(), input.end(), [&result, numberOfTimes](T item){ 
        for(std::uint16_t numberOfReps = 0; numberOfReps != numberOfTimes; ++numberOfReps)
        {
            result.push_back(item);
        }
    });

    return result;
}
#包括

#包括

这样的内容可能会帮助您实现以下目标:

#include <iostream>
#include <algorithm>
#include <vector>

template<typename T>
std::vector<T> RepeateEntryNumberOfTimes(std::vector<T> input, std::uint16_t numberOfTimes)
{
    std::vector<T> result;

    std::for_each(input.begin(), input.end(), [&result, numberOfTimes](T item){ 
        for(std::uint16_t numberOfReps = 0; numberOfReps != numberOfTimes; ++numberOfReps)
        {
            result.push_back(item);
        }
    });

    return result;
}
#包括

#include

您的代码有问题,因为它将元素插入到同一个向量中。 修改向量会使旧的迭代器失效,因此代码具有未定义的行为

即使忽略这个错误,代码的逻辑似乎也并没有达到预期的效果

模板
输出复制元素(在b中,在e中,大小为n,输出为o)
{
while(b!=e){
o=std::fill_n(o,n,*b++);
}
返回o;
}
std::vector foo(const std::vector&x)
{
std::向量r;
r、 保留(x.大小()*3);
复制_元素(x.begin(),x.end(),3,std::back_插入器(r));
返回r;
}

您的代码有问题,因为它将元素插入到同一个向量中。 修改向量会使旧的迭代器失效,因此代码具有未定义的行为

即使忽略这个错误,代码的逻辑似乎也并没有达到预期的效果

模板
输出复制元素(在b中,在e中,大小为n,输出为o)
{
while(b!=e){
o=std::fill_n(o,n,*b++);
}
返回o;
}
std::vector foo(const std::vector&x)
{
std::向量r;
r、 保留(x.大小()*3);
复制_元素(x.begin(),x.end(),3,std::back_插入器(r));
返回r;
}

从<代码> h < /Cord>后缀,你使用过时的C++编译器吗?推荐:谢谢,我会看看。忽略这个,插入函数是否被适当地写入以实现目的?遗憾的是,插入行有未定义的行为,不幸的是,自从<代码> x.开始(<)/代码>和<代码> x.NoX()+1
是向量本身的迭代器。请参阅。创建新向量而不是修改现有向量将更简单、更高效one@Damien我同意。从这个代码中可以看出,从<代码> h >代码>后缀,你是否使用过时的C++编译器?推荐:谢谢,我会看一看。为此,是否正确编写了insert函数来实现此目的?感谢插入行具有未定义的行为,不幸的是,因为
x.begin()
x.begin())+1
是向量本身的迭代器。请参阅。创建新向量而不是修改现有向量将更简单、更高效one@Damien我同意。有什么更干净的方法可以做到这一点?