मैं थोड़ा स्वीकार किए जाते हैं जवाब देने के लिए इस पसंद करेंगे:
#include <vector>
#include <iterator>
#include <utility>
template <typename T>
typename std::vector<T>::iterator append(const std::vector<T>& src, std::vector<T>& dest)
{
typename std::vector<T>::iterator result;
if (dest.empty()) {
dest = src;
result = std::begin(dest);
} else {
result = dest.insert(std::end(dest), std::cbegin(src), std::cend(src));
}
return result;
}
template <typename T>
typename std::vector<T>::iterator append(std::vector<T>&& src, std::vector<T>& dest)
{
typename std::vector<T>::iterator result;
if (dest.empty()) {
dest = std::move(src);
result = std::begin(dest);
} else {
result = dest.insert(std::end(dest),
std::make_move_iterator(std::begin(src)),
std::make_move_iterator(std::end(src)));
}
src.clear();
src.shrink_to_fit();
return result;
}
उदाहरण:
#include <string>
#include <algorithm>
#include <iostream>
int main()
{
const std::vector<std::string> v1 {"world", "!"};
std::vector<std::string> v2 {" "}, v3 {"hello"}, v4 {};
append(v1, v2); // copies
append(std::move(v2), v3); // moves
append(std::move(v3), v4); // moves
std::copy(std::cbegin(v4), std::cend(v4), std::ostream_iterator<std::string> {std::cout});
std::cout << std::endl;
}
डीएसटी खाली नहीं है। –
@ ŁukaszLew: ठीक है, जो चीजों को बदलता है। मैं –
@ ŁukaszLew संपादित करूंगा: मैंने जवाब बदल दिया। गलतफहमी के लिए खेद है –