可能重复:
如何在C++中拆分字符串?
在C++中拆分字符串的最佳方法?可以假设该字符串由分隔的字组成;
从我们的指南角度来看,不允许使用C字符串函数,也不允许使用Boost,因为不允许使用安全锥形开源.
我现在最好的解决方案是:
string str("denmark; sweden; india; us");
str上面应该作为字符串存储在vector中.我们怎样才能做到这一点?
感谢您的投入.
我正在阅读Scott Meyers的"Effective C++"一书.有人提到有内置指针tr1::shared_ptr和tr1::weak_ptr行为,但它们跟踪tr1::shared_ptrs指向对象的数量.
这称为引用计数.这在防止非循环数据结构中的资源泄漏方面效果很好,但是如果两个或多个对象包含tr1::shared_ptrs形成循环,则循环可以使彼此的引用计数保持在零以上,即使所有指向循环的外部指针都已被破坏.
那是tr1::weak_ptrs进来的地方.
我的问题是循环数据结构如何使引用计数高于零.我恳请一个示例C++程序.问题是如何解决的weak_ptrs?(再次,请举例).
我正在阅读一篇关于算法的摊销分析的文章.以下是文本摘要.
摊销分析与平均案例分析类似,因为它涉及一系列操作的平均成本.但是,平均案例分析依赖于有关数据结构和操作的概率假设,以便计算算法的预期运行时间.因此,它的适用性取决于关于算法输入的概率分布的某些假设.
平均情况限制并不排除即使输入概率分布的假设有效,人们也会"不幸"并遇到需要超过预期时间的输入的可能性.
我对上述文字片段的疑问是:
在第一段中,平均案例分析如何"依赖于关于数据结构和操作的概率假设?"我知道平均案例分析取决于输入概率,但上述陈述意味着什么?
作者在第二段中的意思是,即使输入分布有效,平均情况也无效?
谢谢!
我正在研究各种树木,并遇到了AVL树木和树木.我想知道
algorithm avl-tree splay-tree binary-search-tree data-structures
我有以下cout声明.我使用char数组,因为我必须传递vsnprintf给转换变量参数列表并存储Msg.
我们有什么方法可以cout输出到C++ std::string?
char Msg[100];
char appname1[100];
char appname2[100];
char appname3[100];
// I have some logic in function which some string is assigned to Msg.
std::cout << Msg << " "<< appname1 <<":"<< appname2 << ":" << appname3 << " " << "!" << getpid() <<" " << "~" << pthread_self() << endl;
Run Code Online (Sandbox Code Playgroud) template<unsigned int n>
struct Factorial {
enum { value = n * Factorial<n-1>::value};
};
template<>
struct Factorial<0> {
enum {value = 1};
};
int main() {
std::cout << Factorial<5>::value;
std::cout << Factorial<10>::value;
}
Run Code Online (Sandbox Code Playgroud)
上面的程序在编译期间计算阶乘值.我想在编译时打印阶乘值,而不是在运行时使用cout打印.我们怎样才能在编译时打印阶乘值?
我正在使用VS2009.
谢谢!
我正在使用VxWorks6.8 C++编译器编译一个相当大的项目.我收到了警告
警告:#endif指令末尾的额外令牌
#ifndef _OM_NO_IOSTREAM
#ifdef WIN32
#ifndef USE_IOSTREAM
#define USE_IOSTREAM
#endif USE_IOSTREAM
#endif WIN32
Run Code Online (Sandbox Code Playgroud)
我收到了很多这些警告.
- 为什么我从C++标准的角度来看这些警告?
- 编译器为此提出警告的理由是什么?
- 解决这个问题的最佳方法是什么?
谢谢
我有以下代码.sprintf中第二个%d的输出始终显示为零.我想我指的是错误的说明符.任何人都可以帮助我获得具有正确值的写字符串.这必须以posix标准实现.感谢您的投入
void main() {
unsigned _int64 dbFileSize = 99;
unsigned _int64 fileSize = 100;
char buf[128];
memset(buf, 0x00, 128);
sprintf(buf, "\nOD DB File Size = %d bytes \t XML file size = %d bytes", fileSize, dbFileSize);
printf("The string is %s ", buf);
}
Run Code Online (Sandbox Code Playgroud)
输出:
The string is
OD DB File Size = 100 bytes XML file size = 0 bytes
Run Code Online (Sandbox Code Playgroud) 我在qnx momemntics上运行以下代码.
#define BILLION 1000000000L;
struct timespec start_time;
struct timespec stop_time;
void start MyTestFunc() {
//Initialize the Test Start time
clock_gettime(CLOCK_REALTIME,&start_time)
// ... additonal code.
cout << "The exectuion time of func "<< calculateExecutionTime();
}
double calculateExecutionTime ()
{
clock_gettime(CLOCK_REALTIME,&stop_time);
double dSeconds = (stop_time.tv_sec - start_time.tv_sec);
double dNanoSeconds = (double)( stop_time.tv_nsec - start_time.tv_nsec ) / BILLION;
return dSeconds + dNanoSeconds;
}
Run Code Online (Sandbox Code Playgroud)
现在我想将代码移植到Windows上.任何人都可以提供示例代码.
谢谢!
我有以下变量:
double dblVar1;
double dblVar2;
Run Code Online (Sandbox Code Playgroud)
它们可能具有较大的值但小于double最大值.
我对上面的变量有加法,乘法和幂等各种算法:
double dblVar3 = dblVar1 * dblVar2;
double dblVar4 = dblVar1 + dblVar2;
double dblVar5 = pow(dblVar1, 2);
Run Code Online (Sandbox Code Playgroud)
在上面所有我必须检查溢出和下溢.我怎样才能在C++中实现这一目标?