我有两个字符串数组,我想比较相等:
my @array1 = ("part1", "part2", "part3", "part4");
my @array2 = ("part1", "PART2", "part3", "part4");
Run Code Online (Sandbox Code Playgroud)
是否有内置的方法来比较数组,就像标量一样?我试过了:
if (@array1 == @array2) {...}
Run Code Online (Sandbox Code Playgroud)
但它只是在标量上下文中评估每个数组,因此比较了每个数组的长度.
我可以使用自己的函数来完成它,但它看起来像是一个低级操作,应该有一个内置的方法来做它.在那儿?
编辑:遗憾的是,我无法访问5.10+或可选组件.
我有一些看起来像的代码:
static const std::string and(" AND ");
Run Code Online (Sandbox Code Playgroud)
这会导致g ++中的错误,如下所示:
Row.cpp:140: error: expected unqualified-id before '&&' token
Run Code Online (Sandbox Code Playgroud)
所以在诅咒将"和"定义为&&的傻瓜后,我补充道
#ifdef and
#undef and
#endif
Run Code Online (Sandbox Code Playgroud)
现在我明白了
Row.cpp:9:8: error: "and" cannot be used as a macro name as it is an operator in C++
Run Code Online (Sandbox Code Playgroud)
这导致我的问题是什么"和"成为C++中的运算符?我找不到任何表明它的东西,当然除了来自g ++的这条消息
我想添加一些我使用boost库格式化的字符串,如下所示
boost::container::vector<std::string> someStringVector;
someStringVector.push_back(
format("after is x:%f y:%f and before is x:%f y:%f\r\n") %
temp.x %
temp.y %
this->body->GetPosition().x %
this->body->GetPosition().y;
Run Code Online (Sandbox Code Playgroud)
编译器抱怨它无法转换类型,我尝试将.str()附加到格式返回的末尾,但它仍然抱怨.
我得到的错误信息是:
error C2664: 'void boost::container::vector<T>::push_back(
const std::basic_string<_Elem,_Traits,_Ax> &)' :
cannot convert parameter 1 from
'boost::basic_format<Ch>' to
'const std::basic_string<_Elem,_Traits,_Ax> &'
Run Code Online (Sandbox Code Playgroud)
有人有见识吗?
所以我只需要一个简单的功能来设置它(吃掉传入的PCM速率(例如:速率接近44100)它的通道(例如:2)和-bits(例如:16)和所需的128 kb\s速率另一个采用PCM数据并将其编码为纯MP3帧的数据.
我知道这看起来像是一项愚蠢的家庭作业,但我向你保证 - 事实并非如此.
我希望它能帮助所有从MP3开始的C++开发人员.
所以有人可以帮助我吗?
来自Scott Meyers的Effective C++:
template<typename T, std::size_t n>
class SquareMatrix: private SquareMatrixBase<T> {
public:
SquareMatrix( )
: SquareMatrixBase<T>(n, 0),
pData(new T[n*n])
{
this->setDataPtr(pData.get());
}
...
private:
boost::scoped_array<T> pData;
};
Run Code Online (Sandbox Code Playgroud)
无论数据存储在何处,从膨胀的角度来看,关键结果是,现在很多 - 也许全部 - SquareMatrix的成员函数可以是对基类版本的简单内联调用,这些基类版本与所有其他具有相同类型的矩阵共享数据,无论其大小.同时,不同大小的SquareMatrix对象是不同的类型,所以即使例如SquareMatrix <double,5>和SquareMatrix <double,1 0>对象在SquareMatrixBase <double>中使用相同的成员函数,也没有机会将SquareMatrix <double,5>对象传递给期望SquareMatrix <double,1 0>的函数.很好,不是吗?
很好,是的,但不是免费的.具有硬连线的矩阵大小的反转版本可能比共享版本生成更好的代码,其中大小作为函数参数传递或存储在对象中.例如,在特定于大小的版本中,大小将是编译时常量,因此有资格进行常量传播等优化,包括将它们作为立即操作数折叠到生成的指令中.这不能在与大小无关的版本中完成.
在上一段的上述描述中,它被称为"因此有资格进行恒定传播等优化,包括将它们作为立即操作数折叠到生成的指令中".这个陈述是什么意思?请来解释一下.
谢谢!
如果您有以下代码:
cout << hex << 10;
Run Code Online (Sandbox Code Playgroud)
输出为'a',表示十进制10转换为十六进制值.
但是,在下面的代码中......
int n;
cin >> hex >> n;
cout << n << endl;
Run Code Online (Sandbox Code Playgroud)
当输入为12时,输出变为18.任何人都可以解释转换的细节吗?它是如何成为小数值的?
我对它成为一个int的兴趣感兴趣.如果分解,那将是:
(( cin >> hex ) >> n);
Run Code Online (Sandbox Code Playgroud)
它是否正确?
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::string str1 = "good", str2 = "luck";
swap(str1,str2); /*Line A*/
int x = 5, y= 3;
swap(x,y); /*Line B*/
}
Run Code Online (Sandbox Code Playgroud)
如果我评论B行代码编译(http://www.ideone.com/hbHwf),而注释行A代码无法编译(http://www.ideone.com/odHka),我收到以下错误:
error: ‘swap’ was not declared in this scope
Run Code Online (Sandbox Code Playgroud)
为什么我在第一种情况下没有收到任何错误?
还在与模板战斗.在这个例子中,尽管直接从书中复制的事实我收到以下错误消息:Error 2 error C2784: 'IsClassT<T>::One IsClassT<T>::test(int C::* )' : could not deduce template argument for 'int C::* ' from 'int'.
这是一本书模板 - 完整指南中的一个例子.(我使用Visual Studio 2010 RC).
template<typename T>
class IsClassT {
private:
typedef char One;
typedef struct { char a[2]; } Two;
template<typename C> static One test(int C::*);
template<typename C> static Two test(…);
public:
enum { Yes = sizeof(IsClassT<T>::test<T>(0)) == 1 };
enum { No = !Yes };
};
class MyClass {
};
struct MyStruct {
}; …Run Code Online (Sandbox Code Playgroud) int main()
{
int *d=0;
printf("%d\n",*d);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这很好用.
>cc legal.c
> ./a.out
0
Run Code Online (Sandbox Code Playgroud)
如果我更改语句int *d=0;,int *d=1;
我会看到错误.
cc: "legal.c", line 6: error 1522: Cannot initialize a pointer with an integer constant other than zero.
Run Code Online (Sandbox Code Playgroud)
很明显,它只允许零.我想知道当我们这样做时,内存中发生了什么,这int *d=0使得它成为有效的语法.
我只是出于好奇而问这个!
小问题:
这是班级:
class Author
{
Author(const std::string& name, const std::string& email, Gender gender);
Author& setName(const std::string& name);
private:
std::string a_name;
std::string a_email;
int a_gender;
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,他写下一个错误:
错误:'Author :: Author(const string&,const string&,Gender)'是私有的|
但它是拙劣的构造者,所以什么是他的女贞,所以他不能得到呐喊?
坦克!