给定一个N元素向量v = ( 1, 2, 3, 4, ... , N )返回范围迭代器覆盖所有大小的块K<N.最后一个范围可以小于Kif N%K!=0.
例如:
v = ("a","b","c","d","e")
Run Code Online (Sandbox Code Playgroud)
显示字符串
"ab", "cd", "e"
N=v.size();
K=2;
Run Code Online (Sandbox Code Playgroud)
一种可能的解决方案是
for( unsigned int i=0; i<v.size(); i+=K )
cout << boost::join( v | boost::adaptors::sliced( i, min(i+K, v.size()) ), "" );
Run Code Online (Sandbox Code Playgroud)
这个解决方案很好,但它有几个问题:
for 循环 - 它需要吗?i+K而不是min(i+K, v.size())算法压缩,你需要额外注意边界情况.这看起来很丑陋,分散注意力.你能提出更优雅的解决方案吗?通过优雅的解决方案,我的意思是使用通用算法,由常用库(例如boost)构建或提供.
-------------------------- [edit] --------------------- -----
你们当中有些人在这方面取得了成功.
#include <iostream>
#include <vector>
#include <string>
#include <boost/range/adaptor/sliced.hpp>
#include <boost/algorithm/string/join.hpp>
#include <boost/assign.hpp> …Run Code Online (Sandbox Code Playgroud) 假设我有一个具有许多显式(静态分配)成员的类和几个动态分配的指针.
当我在巫婆中声明一个复制构造函数时,我会手动分配成员的深层副本,我不想复制每个静态分配的成员explicite.
如何在显式复制构造函数中使用隐式(默认)复制构造函数?
我的基类需要公开一个方法,对于某些派生类,它会返回一个指向动态分配数组的智能指针,对于某些其他派生类,它将返回一个指向静态分配的指针/引用.
例:
class Base
{
public:
virtual ??? foo()=0;
}
class A : public Base
{
private:
float arr[10];
public:
??? foo(){ return ???arr; }
}
class B : public Base
{
public:
??? foo(){
allocate array;
return ???array;
}
}
Run Code Online (Sandbox Code Playgroud)
动态分配的数组是在类方法中创建的,我更喜欢使用std::unique_ptr.但是我应该为类中的静态分配数组做些什么A呢?
我应该创建自己的派生类,std::unique_ptr它会知道指针分配,并且不会试图破坏静态分配的指针,或者可能已经存在这样的智能指针?