可以在编译时定义静态数组,如下所示:
const std::size_t size = 5;
unsigned int list[size] = { 1, 2, 3, 4, 5 };
Run Code Online (Sandbox Code Playgroud)
问题1 - 是否可以通过使用各种元编程技术在编译时"以编程方式"分配这些值?
问题2 - 假设数组中的所有值都是相同的barr,是否可以在编译时以编程方式选择性地分配值?
例如:
const std::size_t size = 7;
unsigned int list[size] = { 0, 0, 2, 3, 0, 0, 0 };
Run Code Online (Sandbox Code Playgroud)
更新: Georg Fritzsche的解决方案非常棒,需要一些工作才能在msvc和intel编译器上进行编译,但这仍然是解决问题的一种非常有趣的方法.
基于以下问题:检查一个字符串是否是其他字符串的旋转
我正在考虑制作一个带有范围的循环迭代器类型,并且能够像这样解决上述问题:
std::string s1 = "abc" ;
std::string s2 = "bca" ;
std::size_t n = 2; // number of cycles
cyclic_iterator it(s2.begin(),s2.end(),n);
cyclic_iterator end;
if (std::search(it, end, s1.begin(),s1.end()) != end)
{
std::cout << "s1 is a rotation of s2" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我的问题,是否已经有这样的东西?我检查了Boost和STL,但都没有确切的实现.
我有一个简单的手写(源自一个std::forward_iterator_tag专门的版本std::iterator),但宁可使用已经制作/测试过的实现.
一般来说,为了效率和速度目的,缓存一个结束迭代器(特别是STL容器)是个好主意吗?比如在下面的代码中:
std::vector<int> vint;
const std::vector<int>::const_iterator end = vint.end();
std::vector<int>::iterator it = vint.begin();
while (it != end)
{
....
++it;
}
Run Code Online (Sandbox Code Playgroud)
在什么条件下最终价值会失效?从容器中擦除会导致所有 STL容器中的结尾无效还是只有一些?
我有类似下面的代码:
template<typename T1, typename T2, typename T3, typename T4>
void inc(T1& t1, T2& t2, T3& t3, T4& t4) { ++t1; ++t2; ++t3; ++t4; }
template<typename T1, typename T2, typename T3>
void inc(T1& t1, T2& t2, T3& t3) { ++t1; ++t2; ++t3; }
template<typename T1, typename T2>
void inc(T1& t1, T2& t2) { ++t1; ++t2; }
template<typename T1>
void inc(T1& t1) { ++t1; }
Run Code Online (Sandbox Code Playgroud)
我想使用即将推出的标准中提出的可变参数模板重新实现它.然而,到目前为止我在网上看到的所有例子似乎都是类似于printf的例子,这里的区别似乎是引用的使用.我想出了以下内容:
inline void inc() { }
template<typename T>
inline void inc(T&& t) { ++t; }
template<typename T,typename …Run Code Online (Sandbox Code Playgroud) 我想写一个像printf这样的例程,而不是功能上的,但是我希望例程能够像printf一样编译检查特性.
例如,如果我有:
{
int i;
std::string s;
printf("%d %d",i);
printf("%d",s.c_str());
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨如下:
1 cc1plus: warnings being treated as errors
2 In function 'int main()':
3 Line 8: warning: too few arguments for format
4 Line 9: warning: format '%d' expects type 'int', but argument 2 has type 'const char*'
Run Code Online (Sandbox Code Playgroud)
printf和co是编译器对待的特殊函数,还是有一些技巧可以让它在任何用户定义的函数上工作?我感兴趣的具体编译器是gcc和msvc
我正在寻找有关内存键值存储引擎或库的建议,这些引擎具有C++接口或用C++编写.
我正在寻找能够在没有任何问题的情况下扩展到大约100,000个键值对并且在linux和win32/64上兼容/可编译的解决方案
c++ ×6
iterator ×2
stl ×2
c++11 ×1
containers ×1
in-memory ×1
key-value ×1
printf ×1
static-array ×1
templates ×1
typechecking ×1
variadic ×1