【问题标题】:Writing contents of a int array into a vector将 int 数组的内容写入向量
【发布时间】:2012-09-03 05:42:57
【问题描述】:

我想将数组的内容写入向量。

int A[]={10,20,30,40,50,60,70,80,90};
vector<int> my_vector;

之前我使用 memcpy 将数组 A 的内容复制到另一个数组 B 中。我想使用 my_vector 而不是数组 B

如何在没有for循环的情况下一次性将数组A的内容写入my_vector?

【问题讨论】:

  • 如果 c++11 vector&lt;int&gt; my_vector(std::begin(A),std::end(A));
  • @Mr.Anubis 谢谢你..:)
  • @Mr.Anubis 将其作为答案发布,这样我就可以给予它应得的正确支持,而 ajaybidari 可以接受它:-)
  • @veer 并不完全是......它的许多实现都可以“复制”。
  • @veer 我相信他们都已经知道了,只是没有发布 :),特别是 Dietmar(c++ 专家之一)

标签: c++ stl vector


【解决方案1】:

使用你想用的C++ 2011

std::copy(std::begin(A), std::end(A), std::back_inserter(my_vector));

... 或

std::vector<int> my_vector(std::begin(A), std::end(A));

...或者,实际上:

std::vector<int> my_vector({ 10, 20, 30, 40, 50, 60, 70, 80, 90 });

如果你没有 C++ 2011,你想定义

namespace whatever {
    template <typename T, int Size>
    T* begin(T (&array)[Size]) { return array; }
    template <typename T, int Size>
    T* end(T (&array)[Size]) { return array + Size; }
}

并将whatever::begin()whatever::end() 与前两种方法之一一起使用。

【讨论】:

  • 为了完整起见,在您的回答中可能值得一提的是其中一些是初始化,但 std::copy 用于复制到现有向量中。
【解决方案2】:
#include <algorithm>
#include <vector>

int main() {
    int A[]={10,20,30,40,50,60,70,80,90};
    std::vector<int> my_vector;
    unsigned size = sizeof(A)/sizeof(int);
    std::copy(&A[0],&A[size],std::back_inserter(my_vector));
}

C++11 要简单得多。

#include <vector>
#include <algorithm>

int main() {
    int A[]={10,20,30,40,50,60,70,80,90};
    std::vector<int> my_vector(std::begin(A),std::end(A));
}

【讨论】:

    【解决方案3】:

    你可以使用memcpy,或者在C++98/03中使用这样的初始化。

    int A[]={10,20,30,40,50,60,70,80,90};
    vector<int> my_vector(A, A + sizeof(A) / sizeof(*A));
    

    也可以使用算法,如copy

    std::copy(A, A + sizeof(A) / sizeof(*A), std::back_inserter(my_vector));
    

    在 C++11 中,使用std::begin(A)std::end(A) 作为数组的开头和结尾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      • 2021-05-31
      相关资源
      最近更新 更多