【问题标题】:C++ STL-Inserter [closed]C++ STL-Inserter [关闭]
【发布时间】:2019-08-19 12:26:03
【问题描述】:

我是 C++ STL 的新手。我在下面的代码中遇到了一些关于输出的问题。为什么这没有提供预期的输出?

#include<iostream>
#include<algorithm>
#include<vector>
#include<iterator>
using namespace std;
void show(vector<int> vect)
{
    for(int i=0;i<vect.size();i++)
    {
        cout<<vect[i]<<" ";
    }
}
int main()
{

    int arr[5]={ 1, 2, 3, 4, 5 };
    vector<int> vect1(arr,arr+5);
    vector<int>::iterator it;
    it=vect1.begin();
    advance(it,3);
    copy(vect1.begin(),vect1.end(),inserter(vect1,it));
    show(vect1);
    return 0;

}

预期输出:1 2 3 1 2 3 4 5 4 5
实际输出:1 2 3 1 0 3 4 5 4 5

谁能帮我找出哪里出错了?

【问题讨论】:

  • 听起来您可能需要学习如何使用调试器来单步调试您的代码。使用好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏差在哪里。如果您要进行任何编程,这是必不可少的工具。进一步阅读:How to debug small programsDebugging Guide
  • 另外,在此处发布minimal reproducible example 时,请确保它可以编译。
  • @MB Nandhini 在向量中插入数据后,它的迭代器变得无效。
  • 您打印的第一个数字是通过cout&lt;&lt;*it; 的第四个元素。我希望 4 作为第一个输出。请通过添加缺少的包含将您的代码转换为 mcve
  • 您可能还想查看std::copy 的文档,其中指出“从第一个开始复制范围 [first, last) 中的所有元素 - 1。行为是如果 d_first 在 [first, last) 范围内,则未定义。在这种情况下,可以使用 std::copy_backward 代替。"

标签: c++ vector stl inserter


【解决方案1】:

用这个替换副本:

vect1.insert(it, std::begin(arr), std::end(arr));

其中要插入的参数是:
it 是要插入向量 vect1 的位置;
std::begin(arr) 是要插入的范围的起始位置;
std::end(arr) 是要插入的范围的结束位置。

【讨论】:

  • 它有效。但我想知道上面的代码有什么问题并得到了答案。
猜你喜欢
  • 2016-04-01
  • 1970-01-01
  • 2010-09-05
  • 2013-11-26
  • 1970-01-01
  • 2010-09-29
  • 2018-10-30
  • 2010-09-20
  • 2011-10-09
相关资源
最近更新 更多