我有一个整数向量,我想将它转换为对的向量(对由bool和int组成).我目前的代码很简单:
std::vector<int> a;
std::vector<std::pair<bool,int> > b;
a.push_back(1);
a.push_back(2);
a.push_back(3);
for(int i = 0; i < a.size(); ++i)
{
b.push_back(std::make_pair(false, a[i]));
}
Run Code Online (Sandbox Code Playgroud)
如果不自己编写循环,有没有办法做到这一点?可能使用一些算法?
声明为staticC和C++之间的任何函数之外的变量之间是否存在任何差异.我读到这static意味着文件范围和变量将无法在文件外部访问.我还读到在C中,全局变量是static.那么这是否意味着C中的全局变量无法在另一个文件中访问?
我有一个std::multiset存储元素class A.我operator<为这个课提供了自己的实现.我的问题是,如果我在这个multiset中插入两个等效对象,他们的顺序是否有保证?例如,首先我将一个对象a1插入到集合中,然后将一个等效对象a2插入到该集合中.当我遍历集合时,我可以期待a1之前a2的结果吗?如果不是,有没有办法用multiset实现这个目的?
我在书中得到了一个程序
#include <stdio.h>
int main( )
{
struct data
{
int a __attribute__( ( aligned ( 8 ) ) ) ;
char ch __attribute__( ( aligned ( 1 ) ) ) ;
float s __attribute__( ( aligned ( 4 ) ) ) ;
} ;
struct data e ;
printf ( "\n%u %u %u", &e.a, &e.ch, &e.s ) ;
printf ( "\n%d", sizeof ( e ) ) ;
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
当我在安装在Windows 7机器上的cygwin上运行它时.我正在输出
2280712 2280716 2280720 16
为什么我得到这个输出?我期待着输出
2280712 …
下面的代码编译并运行得很好.正当我以为我开始对rvalue引用和std :: forward进行了很好的掌握 - 这个非常简单的代码揭示了rvalue有一些非常基本的东西,我不明白.请澄清.
#include <iostream>
#include <iomanip>
using namespace std;
void fn( int&& n )
{
cout << "n=" << n << endl;
n = 43;
cout << "n=" << n << endl;
}
int main( )
{
fn( 42 );
}
Run Code Online (Sandbox Code Playgroud)
我用g ++ 4.7使用以下命令行编译它:
g ++ --std = c ++ 11 test.cpp
输出为:
n = 42
n = 43
我的主要问题是编译器在函数fn中存储'n'的位置?
可以说我有这样的层次结构(这只是一个测试程序.请不要指出与内存泄漏有关的任何内容,析构函数不是虚拟的等等):
class I
{
public:
virtual void fun(int n, int n1) = 0;
};
class A : public I
{
public:
void fun(int n, int n1)
{
std::cout<<"A::fun():" <<n<<" and n1:" <<n1<<"\n";
}
};
class B : public I
{
public:
void fun(int n, int n1)
{
std::cout<<"B::fun():" <<n<<" and n1:" <<n1<<"\n";
}
};
int main()
{
std::vector<I*> a;
a.push_back(new A);
a.push_back(new B);
//I want to use std::for_each to call function fun with two arguments.
}
Run Code Online (Sandbox Code Playgroud)
如何调用fun()方法,该方法使用std :: for_each获取两个参数?我想我必须使用std :: …
每当从我的代码生成结构化异常时,我使用以下代码创建一个minidump文件:
void CreateMiniDump( EXCEPTION_POINTERS* pep )
{
// Open the file
typedef BOOL (*PDUMPFN)(
HANDLE hProcess,
DWORD ProcessId,
HANDLE hFile,
MINIDUMP_TYPE DumpType,
PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
PMINIDUMP_CALLBACK_INFORMATION CallbackParam
);
HANDLE hFile = CreateFile( _T("C:/temp/MiniDump.dmp"), GENERIC_READ | GENERIC_WRITE,
0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
HMODULE h = ::LoadLibrary(L"DbgHelp.dll");
PDUMPFN pFn = (PDUMPFN)GetProcAddress(h, "MiniDumpWriteDump");
if( ( hFile != NULL ) && ( hFile != INVALID_HANDLE_VALUE ) )
{
// Create the minidump
MINIDUMP_EXCEPTION_INFORMATION mdei;
mdei.ThreadId = GetCurrentThreadId();
mdei.ExceptionPointers = pep;
mdei.ClientPointers = …Run Code Online (Sandbox Code Playgroud) 我是PowerShell脚本的新手,正在尝试Function.这是我写的代码:
Function Add
{
$sum = 0;
for($i = 0; $i -le $args.length; ++$i)
{
[int] $num = $args[$i]
$sum += $num
}
Write-Output "Sum is $sum"
}
Run Code Online (Sandbox Code Playgroud)
我试着打电话使用Add 1,2,3.但是,当我执行时,我收到以下错误:
无法将"System.Object []"类型的"System.Object []"值转换为"System.Int32"类型.
知道如何解决这个问题吗?
我注意到std :: string的length方法返回字节长度,std :: u16string中的相同方法返回2字节序列的数量.
我还注意到,当字符或代码点在BMP之外时,长度返回4而不是2.
此外,Unicode转义序列仅限于\ unnnn,因此转义序列不能插入U + FFFF上方的任何代码点.
换句话说,似乎不支持BMP之外的代理对或代码点.
鉴于此,使用理解UTF-8,UTF-16,代理对等的非标准字符串操作库是否被接受或推荐?
我的编译器是否有错误或我是否错误地使用标准字符串操作方法?
例:
/*
* Example with the Unicode code points U+0041, U+4061, U+10196 and U+10197
*/
#include <iostream>
#include <string>
int main(int argc, char* argv[])
{
std::string example1 = u8"A?";
std::u16string example2 = u"A?";
std::cout << "Escape Example: " << "\u0041\u4061\u10196\u10197" << "\n";
std::cout << "Example: " << example1 << "\n";
std::cout << "std::string Example length: " << example1.length() << "\n";
std::cout << "std::u16string Example length: " << …Run Code Online (Sandbox Code Playgroud) 我是C#的新手,并尝试开发一个小型应用程序,在内部打开命令提示符并在此处执行一些命令.这是我到目前为止所做的:
m_command = new Process();
m_command.StartInfo.FileName = @"cmd.exe";
m_command.StartInfo.UseShellExecute = false;
m_command.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
m_command.StartInfo.CreateNoWindow = true;
m_command.StartInfo.RedirectStandardInput = true;
m_command.StartInfo.RedirectStandardOutput = true;
m_command.Start();
m_reader = m_command.StandardOutput;
m_writer = m_command.StandardInput;
m_writer.WriteLine("Somecommand"); //execute some command
Run Code Online (Sandbox Code Playgroud)
如您所见,我已重定向输入和输出.我的问题是如何同步执行"some命令",即我想使用重定向输出读取命令的结果.为此,我必须等到我使用WriteLine调用的命令才能完成.我怎么做?