#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
string cmd;
while(strcmp(cmd.c_str(),"exit")==0 && strcmp(cmd.c_str(),"\exit")==0)
{
cin>>cmd;
cout<<cmd;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我被卡住了.
我最近采访了一家公司,他们让我写一个算法,找到数组中元素总和最大的子序列.数组中的元素可以是负数.是否有O(n)解决方案?非常感谢任何好的解决方案.
我想所有都malloc(sizeof(structure)) 可以这样替换:
char[sizeof(structure)]
Run Code Online (Sandbox Code Playgroud)
那么什么时候malloc需要?
我有一个类模板,看起来像这样:
template<typename T, typename Mutex, typename SomePolicy>
class my_class {
public:
T f() const {
resource_lock a_lock(some_mutex);
return some_policy.some_operation(some_data);
}
private:
T some_data;
mutable Mutex some_mutex;
SomePolicy some_policy;
};
Run Code Online (Sandbox Code Playgroud)
如果不同时使用,我们有一个虚拟互斥类型,它具有所有成员函数作为内联空函数而没有数据.有些策略包含每个实例数据和那些没有任何数据的策略.
这是库代码,事实证明这个类模板在应用程序代码中使用,其中额外的字节对于数据成员是必需的some_mutex,some_policy甚至当它们是空类时.所以我想利用空基优化.对于该政策,这很容易:
template<typename T, typename Mutex, typename SomePolicy>
class my_class {
public:
T f() const {
resource_lock a_lock(the_data.some_mutex);
return the_data.some_operation(the_data.some_data);
}
private:
struct data : SomePolicy {
T some_data;
mutable Mutex some_mutex;
};
data the_data;
};
Run Code Online (Sandbox Code Playgroud)
但是,考虑到这some_mutex一点mutable,我不知道如何使它成为一个没有制作的基类the_data,因此所有数据mutable,从而完全接管编译器的责任,保护我免受愚蠢的常量错误. …
在诸如游戏开发,实时系统等的某些开发领域中,具有快速且优化的程序是重要的.另一方面,现代编译器已经进行了大量优化,并且在一个需要考虑截止日期的世界中,在汇编中进行优化可能非常耗时.
在C/C++程序中使用Assembly优化某些功能真的值得吗?
使用今天的现代编译器使用Assembly优化C/C++程序时,是否真的有足够的性能提升?
我对所发布的答案有所了解,在嵌入式系统,多媒体编程(图形,声音等)等特定领域,任何可以获得的收益都很重要.此外,人们需要能够(或有能力)在装配中做得比现代编译器更好.做一些真正优化的C/C++可以花费更少的时间并且可以做得足够好.最后一点,学习汇编可以帮助理解程序的内部机制,并最终使某人成为更好的程序员.
我已经阅读了许多帖子,询问有关如何转换C++ std::string或const std::string&将其char*传递给C函数的问题,而且似乎有很多关于这样做的警告.一个人必须要注意字符串是连续的和许多其他东西.关键是我从来没有真正理解需要注意的所有要点以及为什么?
我想知道,如果有人可以总结告诫和挫折有关从做一个转换std::string到char*所需要传递给C函数?
当它std::string是一个const引用时,它只是一个非const引用,当C函数char*改变它时,它什么时候不会改变它.
我的代码中有字符串标记,它们被转换为数字并用于在标记值结构中搜索值.
我有这样的事情:
void foo()
{
type value = search("SomeTag");
}
Run Code Online (Sandbox Code Playgroud)
搜索定义如下:
type search(const char* tag)
{
return internal_search(toNumber(tag));
}
Run Code Online (Sandbox Code Playgroud)
因为所有时间标记在编译时都是常量,所以我想删除将标记转换为搜索函数中的数字的调用.我知道可以在编译时使用模板(http://en.wikipedia.org/wiki/Compile_time_function_execution)执行一些简单的函数,但我不知道如何迭代空终止字符串并保留中间值在模板中.你能给出一个简单的样本来迭代一个空终止的字符串,并在一个公共变量中添加字符吗?
考虑使用boost的异常类的以下代码:
class exception : virtual public boost::exception {
// ...
};
template<typename Exc>
class exception_impl : virtual public std::exception
, public Exc {
public:
exception_impl(const Exc& exc) : Exc(exc) {}
virtual const char* what() const throw() {return "blah";}
};
Run Code Online (Sandbox Code Playgroud)
(实际上这段代码更复杂.例如,exception_impl只有std::exception后者不是已经是直接或间接的基类Exc.但这只会分散我的问题,所以我跳过了它.)
鉴于此,我现在可以派生自己的异常类:
class some_exception : public exception {
// ...
};
Run Code Online (Sandbox Code Playgroud)
并使用它们:
struct tag_test_int;
typedef boost::error_info<tag_test_int,int> test_int_info;
void f()
{
boost::throw_exception( exception_impl<some_exception>() << test_int_info(42) );
}
Run Code Online (Sandbox Code Playgroud)
但是,事实证明,生成的异常没有该test_int_info对象.所以我更改了exception_impl构造函数以提供一些诊断信息:
exception_impl(const Exc& exc)
: …Run Code Online (Sandbox Code Playgroud) 一位同事不小心写了这样的代码:
struct foo {
foo() : baz(foobar) {}
enum bar {foobar, fbar, foob};
bar baz;
};
void f() {
for( auto x : { foo::foobar,
foo::fbar,
foo::
foo::
foo::foob } );
// ...
}
Run Code Online (Sandbox Code Playgroud)
GCC 5.1.0编译了这个.
这个编译的规则是什么?