如何在C++中格式化输出?换句话说,什么是C++相当于使用printf这样的:
printf("%05d", zipCode);
Run Code Online (Sandbox Code Playgroud)
我知道我可以printf在C++中使用,但我更喜欢输出运算符<<.
你会使用以下内容吗?
std::cout << "ZIP code: " << sprintf("%05d", zipCode) << std::endl;
Run Code Online (Sandbox Code Playgroud) 通常,使用排序std::vector而不是a 更有效std::set.有没有人知道一个库类sorted_vector,它基本上有一个类似的接口std::set,但插入元素到排序的矢量(所以没有重复),使用二元搜索find元素等?
我知道写起来并不难,但最好不要浪费时间并使用现有的实现.
更新:使用排序向量而不是集合的原因是:如果您有数十万个小集合,每个集合只包含10个左右的成员,那么使用排序向量代替更高内存效率.
我有两个变量,key并且value,我想将它们作为键/值对添加到列表中:
key = "width"
value = 32
mylist = list()
mylist$key = value
Run Code Online (Sandbox Code Playgroud)
结果是这样的:
mylist
# $key
# [1] 32
Run Code Online (Sandbox Code Playgroud)
但我想这样做:
mylist
# $width
# [1] 32
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
在代码中,我有时会看到人们以十六进制格式指定常量,如下所示:
const int has_nukes = 0x0001;
const int has_bio_weapons = 0x0002;
const int has_chem_weapons = 0x0004;
// ...
int arsenal = has_nukes | has_bio_weapons | has_chem_weapons; // all of them
if(arsenal &= has_bio_weapons){
std::cout << "BIO!!"
}
Run Code Online (Sandbox Code Playgroud)
但是我在这里使用十六进制格式没有意义.有没有办法直接用二进制文件做?像这样的东西:
const int has_nukes = 0b00000000000000000000000000000001;
const int has_bio_weapons = 0b00000000000000000000000000000010;
const int has_chem_weapons = 0b00000000000000000000000000000100;
// ...
Run Code Online (Sandbox Code Playgroud)
我知道C/C++编译器不会编译它,但必须有一个解决方法吗?是否有可能在其他语言如Java?
使用时,你有什么方法可以用脚射击自己boost::shared_ptr?换句话说,当我使用时,我必须避免哪些陷阱boost::shared_ptr?
我有很多boost::shared_ptr<MyClass>对象,在某些时候我故意想要delete其中一些来释放一些记忆.(我知道那时我将永远不再需要尖头MyClass物体了.)我怎么能这样做?
我想你不能只delete()用我得到的原始指针调用get().
我见过一个函数get_deleter(shared_ptr<T> const & p)中boost::shared_ptr,但我不知道如何使用它,并且还表示,实验就在旁边.(我想我有1.38升.)
也许只是boost::shared_ptr为变量分配一个新的空?这应该扔掉旧值并删除它.
我只是做了一个svn merge将更改从主干合并到分支:
$ svn merge -r328:HEAD file:///home/user/svn/repos/proj/trunk .
--- Merging r388 through r500 into '.':
A foo
A bar
C baz1
C baz2
U duh
[...]
Run Code Online (Sandbox Code Playgroud)
但是有太多的冲突,所以我想撤消这个.
一种方法是提交然后合并.但由于冲突我无法承诺.在这种情况下撤消的最佳方法是什么?
我有一个std::vector与n元素.现在我需要将指针传递n-1给具有函数最后元素的向量.
例如,我的vector<int> foo包含(5,2,6,87,251).一个函数需要vector<int>*,我想传递一个指针(2,6,87,251).
我可以(安全地)获取迭代器++foo.begin(),将其转换为指针并将其传递给函数吗?还是用&foo[1]?
更新:人们建议我改变我的函数来获取迭代器而不是指针.在我的情况下,这似乎是不可能的,因为我提到的find功能是...的功能unordered_set<std::vector*>.那么在这种情况下,是将n-1元素复制foo到一个新的向量中并find使用指向该唯一选项的指针进行调用?非常低效!这就像画家Shlemiel,特别是因为我必须查询许多子集:最后一个n-1,然后n-2等等元素,看看它们是否在unordered_set.