我想声明一个2D数组并为其赋值,而不运行for循环.
我以为我可以使用以下想法
int array[5] = {1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)
这也适用于初始化2D阵列.但显然我的编译器不喜欢这个.
/*
1 8 12 20 25
5 9 13 24 26
*/
#include <iostream.h>
int main()
{
int arr[2][5] = {0}; // This actually initializes everything to 0.
arr [1] [] = {1,8,12,20,25}; // Line 11
arr [2] [] = {5,9,13,24,26};
return 0;
}
Run Code Online (Sandbox Code Playgroud)
J:\ CPP\Grid> bcc32.exe Grid.cpp
Borland C++ 5.5.1 for Win32版权所有(c)1993,2000 Borland
Grid.cpp:
错误E2188 Grid.cpp 11:函数main()中的表达式语法
错误E2188 Grid.cpp 12:函数main()中的表达式语法
警告W8004 Grid.cpp 14:'arr'被分配一个从未在函数main()中使用的值
*编译中的2个错误*
请帮助确定使用我的一组值初始化2d数组的正确方法.
即使我读过一些文章,说大多数2的补码用于表示有符号整数中的负数,这是最好的方法,
但是由于某些原因,我(在下面)这个(下面)卡在我的头脑中,在不知道它的历史的情况下无法摆脱它
"使用带符号的int时,使用前导位为1来表示负数."
我在网上和StakOverflow上看了很多帖子,2的补码是表示负数的最佳方式.但我的问题不是关于最好的方式,而是关于历史或"领先位"概念出现在哪里然后消失?
PS:也只是不是我,其他一些人也对此感到困惑.
编辑 - 1我在上面提到的一个例子中描述了所谓的前导1方法: 为什么两个补码用于表示负数?
现在我明白了,1的MSB表示负数.这本质上是2的补充而不是任何特殊方案.
例如.如果不是第1位,我们不能说1011代表-5还是+11.
感谢:詹姆斯德林,奥利查尔斯沃思,利斯特先生提出恳求问题,让我意识到正确的答案.
Rant:我认为有很多团体/人都被教导或被认为(错误地)认为1011评估为-3.1表示 - 和011表示3.
那些问"我的问题是什么......"的人可能从他们学到的第一个实例中学到了正确的2的补充方式,并且没有接触到这些错误的答案.
如何以这样的方式重写此代码:只要用户通过有效方向,就会始终显示正确的状态(CA,AL等)字符串.
即如何确保编译时枚举方向中的每个enum_types都有一个有效的case语句,而不是运行时?
对于.例如.我故意评论了东方的案例陈述.有没有办法在编译时捕获它.
我的直觉是(否)这就是语言提供默认情况的原因,因此这可能是不可能的.但我会把它留给专家.
#include <iostream>
#include <string>
using namespace::std;
typedef enum
{
min_dir = -1,
north,
south,
east,
west,
}directions;
directions get_direction( string user_choice)
{
if(user_choice == "north")
{
return north;
}
else if (user_choice == "south")
{
return south;
}
else if (user_choice == "east")
{
return east;
}
else if (user_choice == "west")
{
return west;
}
else
{
return min_dir;
}
}
int main()
{
string user_direction;
cout << "Enter direction\n";
cin >> user_direction;
directions my_dir …
Run Code Online (Sandbox Code Playgroud) 您将如何设计用于查找的表数据结构?
我基本上必须代表下表
Country Activity Legal_Age
European Drink 18
European Drive 21
American Drink 21
American Drive 18
Run Code Online (Sandbox Code Playgroud)
这里我的密钥是(国家/地区和活动),价值是Legal_age.
我想到使用std :: map来解决这个问题(到个别地图),如下所示.
national_Activity_age_map
European European_Activity_age_map
American American_Activity_age_map
Run Code Online (Sandbox Code Playgroud)
European_Activity_age_map
Drink 18
Drive 21
Run Code Online (Sandbox Code Playgroud)
American_Activity_age_map
Drink 21
Drive 18
Run Code Online (Sandbox Code Playgroud)
但问题是,随着原始表的列数不断增加,要添加和维护的映射数量不断增加.
假设美国选择为美国公民和非公民分别饮酒.然后我将不得不添加新的映射并修改现有的映射.
是否有一种简单而干净的方式在DataStructure中表示此数据,该数据采用多因子密钥并生成一个值?
有一些类似的问题如下,但没有解决我的具体问题. 您将使用什么数据结构来表示此数据格式?
更新:我不能在工作中使用Boost功能,因为它必须被移植(或类似的东西).是否有我可以使用的C++(gcc 4.1.2)功能.
我收到编译错误.我正在尝试向向量添加字符串并将其保持为"排序顺序".
XYZ是我的班级.addPortEntry
class XYZ
{
public:
portListFile(string sTmp);
void addPortEntry(string sPortName, string sDirection);
private:
string sPortListFileName;
vector <string> v_input_ports;
...
};
void XYZ::addP(string sP, string sDir)
{
if(sDir == "in")
{
v_input_ports.insert(sP); // Line 42
}
...
}
Run Code Online (Sandbox Code Playgroud)
错误:
XYZ.cpp: In member function ‘void XYZ::addP(std::string, std::string)’:
XYZ.cpp:42: error: no matching function for call to ‘std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::insert(const char [10])’
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/vector.tcc:93: note: candidates are: typename std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::insert(__gnu_cxx::__normal_iterator<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer, std::vector<_Tp, _Alloc> >, …
Run Code Online (Sandbox Code Playgroud) 我在代码库中看到了一段类似的perl代码,想知道这个(设置i=100
)是否是一个摆脱for循环的好方法?这有什么陷阱吗?
int a[100];
...
bool check_if_array_contains_29()
{
bool result = false;
for(int i=0; i<100; ++i)
{
if(a[i] == 29)
{
result = true;
i = 101;
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
这更像我会做的事情.
bool check_if_array_contains_29()
{
bool result = false;
for(int i=0; i<100 && !result; ++i)
{
if(a[i] == 29)
{
result = true;
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
编辑-1:
我不是在寻找perl中的oneliner来实现功能.真正的代码(功能)要复杂得多.这只是我简化的一个例子来解释我的观点(提前终止for循环).
我发现一个常量的文字get放在程序的数据段中(来自SO)并且是只读的,因此行"s [0] ='a'"会导致错误,这实际上发生在我取消注释该行并运行.但是,当我查看MS VS中的内存窗口时,变量全部放在内存中.我很好奇他们(编译器)如何强制执行对's'的只读访问?
#include <iostream>
int main(void)
{
char *s = "1023";
char s_arr[] = "4237";
char *d = "5067";
char s_arr_1[] = "9999";
char *e = "6789";
printf("%c\n", s[0]);
// s[0] = 'a'; This line would error out since s should point to data segment of the program
printf("%s\n", s);
system ("pause");
}
0x002E54F4 31 30 32 33 00 00 00 00 34 32 33 37 00 00 00 00 1023....4237....
0x002E5504 35 30 36 37 00 00 …
Run Code Online (Sandbox Code Playgroud) 简单的fopen操作似乎不起作用.perror返回 - 参数无效.可能有什么不对.
我在R:中有一个名为abc.dat的ascii文件.
int main()
{
FILE *f = fopen("R:\abc.dat","r");
if(!f)
{
perror ("The following error occurred");
return 1;
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
发生以下错误:参数无效.
我应该在头文件中指定我的类级静态常量?
class ABC
{
public:
enum A1
{
};
//Manager functions
ABC(int x )
{
m_x = x;
};
viirtual ~ABC();
protected:
int data;
private:
//Typedef
typedef std::pair(int, int) INT_PAIR;
typedef std::pair(int, int) INT_PAIR1;
...
//functions
void increment_x();
//Member data
int m_x;
... whole lot of other data
}
Run Code Online (Sandbox Code Playgroud)
我应该在这个类声明(ABC.h)中声明一个私有静态const变量,如版本号?
static const std::string version;
Run Code Online (Sandbox Code Playgroud)
它究竟适合哪里?它不是真正的成员数据,因为它是静态的.(不是每个对象)
编辑 - 1:
这些变量是否有特定的优先级?它们是在开始时(在ABC类之后的第一个开口大括号之后?或者在我的代码段中的私有关键字之后?)(或者)是在typedef之后吗?
当然我会在我的abc.cpp文件中提到const std :: string version ="10";
编辑2:我期待卢卡斯提到的答案.(请提供有效的推理)
在类似我下面提到的类声明中,应该放置静态变量吗?
请不要提供答案,提到decl需要在.cpp文件中的.h文件和定义中. - 我已经知道了.
#include <stdio.h>
int main()
{
int i = 1, j = 1;
for(i; i<=5; i++)
{
for(j; j<=5; j++)
{
printf("%d - %d\n",i, j);
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码只运行一次外部for循环.输出是:
1 - 1
1 - 2
1 - 3
1 - 4
1 - 5
Run Code Online (Sandbox Code Playgroud)
但是当我进行以下更改时,printfs会打印预期的25次.
for(i=1; i<=5; i++)
{
for(j=1; j<=5; j++)
{
printf("%d - %d\n",i, j);
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下这种行为吗?
我是Perl的新手.我正在编写一些脚本,并希望定义我自己的打印调用myprint()
,它将根据一些标志打印传递给它的东西(详细/调试标志)
open(FD, "> /tmp/abc.txt") or die "Cannot create abc.txt file";
print FD "---Production Data---\n";
myprint "Hello - This is only a comment - debug data";
Run Code Online (Sandbox Code Playgroud)
有人可以帮我提供一些示例代码来实现myprint()
功能吗?