草庐IT

make_move_iterator

全部标签

c++ - 比较 vector<T>::iterator 和 vector<T>::reverse_iterator

我正在做一个练习,我有一个vector,我正在编写自己的反向算法,方法是使用反向和正常(正向)迭代器来反转vector的内容。但是,我无法比较迭代器。intvals[]={1,2,3,4,5,6,7,8,9,0};vectornumbers(vals,vals+10);vector::iteratorstart=numbers.begin();vector::reverse_iteratorend=numbers.rend();我有一个先前的算法,用于通过使用两个迭代器来反转vector,但是在这个任务中,我无法使用它们之间的!=运算符来比较它们。我的猜测是获取vector中的底层指针

c++ - 比较 vector<T>::iterator 和 vector<T>::reverse_iterator

我正在做一个练习,我有一个vector,我正在编写自己的反向算法,方法是使用反向和正常(正向)迭代器来反转vector的内容。但是,我无法比较迭代器。intvals[]={1,2,3,4,5,6,7,8,9,0};vectornumbers(vals,vals+10);vector::iteratorstart=numbers.begin();vector::reverse_iteratorend=numbers.rend();我有一个先前的算法,用于通过使用两个迭代器来反转vector,但是在这个任务中,我无法使用它们之间的!=运算符来比较它们。我的猜测是获取vector中的底层指针

c++ - move 字符串流的 .str() 成员是否合法?

考虑以下示例:#includetemplateinlinestd::stringto_string(Tconst&op){std::ostringstreamresult;result如果我要返回result,而不是result.str(),它将自动成为一个右值。结果中包含的字符串并非如此(我假设)。我的期望是它被复制并且拷贝作为右值返回。所以我的问题是,这样做是否合法:returnstd::move(result.str());我会假设它是,期望流留下一个有效的空字符串。但我并不确定是否真的去做。 最佳答案 std::ostrea

c++ - move 字符串流的 .str() 成员是否合法?

考虑以下示例:#includetemplateinlinestd::stringto_string(Tconst&op){std::ostringstreamresult;result如果我要返回result,而不是result.str(),它将自动成为一个右值。结果中包含的字符串并非如此(我假设)。我的期望是它被复制并且拷贝作为右值返回。所以我的问题是,这样做是否合法:returnstd::move(result.str());我会假设它是,期望流留下一个有效的空字符串。但我并不确定是否真的去做。 最佳答案 std::ostrea

c++ - 为什么使用 std::make_* 而不是构造函数更好?

STL中有一些以make_前缀开头的函数,如std::make_pair、std::make_shared、std::make_unique等。为什么使用它们而不是简单地使用构造函数更好?autopair2=std::pair(1,2.0);autopair3=std::make_pair(1,2.0);std::shared_ptrpointer1=std::shared_ptr(newint(10));std::shared_ptrpointer2=std::make_shared(10);我只是看到这些函数使代码更短,但仅此而已吗?还有其他优势吗?这些功能使用起来更安全吗?

c++ - 为什么使用 std::make_* 而不是构造函数更好?

STL中有一些以make_前缀开头的函数,如std::make_pair、std::make_shared、std::make_unique等。为什么使用它们而不是简单地使用构造函数更好?autopair2=std::pair(1,2.0);autopair3=std::make_pair(1,2.0);std::shared_ptrpointer1=std::shared_ptr(newint(10));std::shared_ptrpointer2=std::make_shared(10);我只是看到这些函数使代码更短,但仅此而已吗?还有其他优势吗?这些功能使用起来更安全吗?

c++ - 为什么 C++11 对值参数有隐式 move ,但对右值参数没有?

在C++11中,值参数(和其他值)在返回时享受隐式move:Afunc(Aa){returna;//usesA::A(A&&)ifitexists}至少在MSVC2010中,右值引用参数需要std::move:Afunc(A&&a){returna;//usesA::A(Aconst&)evenifA::A(A&&)exists}我想在函数内部,右值引用和值的行为相似,唯一的区别是在值的情况下,函数本身负责销毁,而对于右值引用,责任在外部。在标准中区别对待它们的动机是什么? 最佳答案 标准化委员会付出了巨大的努力来创建措辞,以便只在

c++ - 为什么 C++11 对值参数有隐式 move ,但对右值参数没有?

在C++11中,值参数(和其他值)在返回时享受隐式move:Afunc(Aa){returna;//usesA::A(A&&)ifitexists}至少在MSVC2010中,右值引用参数需要std::move:Afunc(A&&a){returna;//usesA::A(Aconst&)evenifA::A(A&&)exists}我想在函数内部,右值引用和值的行为相似,唯一的区别是在值的情况下,函数本身负责销毁,而对于右值引用,责任在外部。在标准中区别对待它们的动机是什么? 最佳答案 标准化委员会付出了巨大的努力来创建措辞,以便只在

c++ - 带有 std::ref 参数的 std::tie 和 std::make_tuple 有什么区别?

写表达式有语义上的区别std::tie(x,y,z)还有下面的表达式?std::make_tuple(std::ref(x),std::ref(y),std::ref(z))如果有,有什么区别?顺便说一句,这个问题和Whatisthedifferencebetweenassigningtostd::tieandtupleofreferences?不一样。因为引用元组不是通过std::ref创建的,而是通过显式指定类型来创建的。 最佳答案 这两个表达式之间几乎†没有功能上的区别。tie()只是更短,而make_tuple()更通用。根

c++ - 带有 std::ref 参数的 std::tie 和 std::make_tuple 有什么区别?

写表达式有语义上的区别std::tie(x,y,z)还有下面的表达式?std::make_tuple(std::ref(x),std::ref(y),std::ref(z))如果有,有什么区别?顺便说一句,这个问题和Whatisthedifferencebetweenassigningtostd::tieandtupleofreferences?不一样。因为引用元组不是通过std::ref创建的,而是通过显式指定类型来创建的。 最佳答案 这两个表达式之间几乎†没有功能上的区别。tie()只是更短,而make_tuple()更通用。根