std :: move()具有不同的数据类型

时间:2018-11-20 18:06:52

标签: c++ boost stl

我有boost::array<int,8> array1,并且我有std::vector<int> temp(8);如何执行从std::move()boost::array的{​​{1}},我想避免使用std::vector

3 个答案:

答案 0 :(得分:7)

您不能仅仅将容器的内胆移动到std::vector中。 std::vector没有提供获取缓冲区所有权的方法。您将必须将各个元素复制/移动到std::vector中。


您可以做的一件事是使用迭代器构造函数和std::make_move_iterator将单个元素移到向量中。使用int不会带来任何好处,但是如果类型移动快于复制,那么您会发现。看起来像

some_container foo;
// populate foo
std::vector<some_type> moved_into{std::make_move_iterator(std::begin(foo)),
                                  std::make_move_iterator(std::end(foo))};

答案 1 :(得分:5)

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial scale=1.0"> <link rel="stylesheet" href="BaseballScoreboard.css"> </head> <body style="background-color:green;"> <div class="scoreboard"> <div> <p id="atbat" class="text1">AT BAT</p> <p id="atbatnum" class="num">12</p> <p id="ball" class="text1">BALL</p> <p id="ballnum" class="num">3</p> <p id="strike" class="text1">STRIKE</p> <p id="strikenum" class="num">2</p> <p id="out" class="text1">OUT</p> <p id="outnum" class="num">0</p> </div> <div> <p id="inning" class="text2">INNING</p> <p id="runs" class="text2">RUNS</p> <p id="hits" class="text2">HITS</p> <p id="errs" class="text2">ERRS</p> </div> <div> <p id="visitor" class="text1">VISITOR</p> <p id="home" class="text1">HOME</p> </div> </div> </body> </html> .scoreboard{ border: 5px solid; border-color: white; color: white; height: 50%; width: 100%; } .text1{ font-size: 50px; float: left; margin-left: 25px; } .text2{ font-size: 50px; float: right; margin-left: 25px; } .num{ font-size: 50px; float: left; margin-left: 15px; background-color: black; padding: 5px; } 是无关的类型,因为boost::array对如何从std::vector进行构建一无所知。

另一方面,您可以将std::vector与迭代器一起使用:

boost::array

答案 2 :(得分:0)

如果有必要,可以移动某物。

array没有保存动态分配的缓冲区,因此没有“窃取”的内容。 int不是可以移动的对象,因此同样,您甚至不能移动数组的各个元素。

简而言之,移动array<int>毫无意义。