2014年1月21日星期二

关于g++编译器 - iFantasticMe

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
关于g++编译器 - iFantasticMe  阅读原文»

g++由自由软件基金发行,g++是基于类unix的c++编译器,通常在命令行运行。它一般附带于类Unix系统中,因此如果你正在运行Unix或Linux系统,它很可能已经存在于你的系统中。你可以对一个源代码文件调用g++命令,就像下面这样:

g++ filename

默认的可执行输出对象为"a.out"。也可以在命令行指定可执行输出文件的名字:

-o outputfile

完整的命令为:

g++ filename -o outputfile

及早发现问题

为了可以在编译时启动警告和构建标准的可兼容的C++代码,我推荐使用以下参数:

-Wall -ansi

了解更多关于编译警告值的知识,请点击

如果你想要编译器将警告视为异常——这意味着你可能无法得到一个可执行对象, 你可以使用-Werror参数。这将确保你不会错过任何异常。

GDB代码

如果你想你的可执行对象支持用GDB(GNU Debugger)调试,请加入-g参数。

g++ filename -g -o outputfile

这将使得在调试期间,GDB可以给你更多细节信息,因为以上命令会在可执行文件中加入额外的代码,以便GDB可以找到变量名称和列出源代码。

更多帮助

如果你使用类Unix系统,你可以通过以下命令了解更多的g++命令行参数。

man g++

创建共享库

如果要了解更多关于在Linux系统中使用GCC创建共享库,可以查看《在Linux使用GCC编译C语言共享库

本文译自此处


本文链接:http://www.cnblogs.com/ifantastic/p/3529070.html,转载请注明。

一个数组,元素为a1,a2,a3...an,b1,b2,b3...bn,将其变为a1,b1,a2,b2,a3,b3...an,bn的算法实现。 - 李广难封  阅读原文»

如题,一个数组A,元素为a1,a2,a3...an,b1,b2,b3...bn,设计一个算法将其变为a1,b1,a2,b2,a3,b3...an,bn,要求算法的时间复杂度为O(nlogn),空间复杂度为O(1)。

采用分治思想:令p=0,q=A.length-1,重复如下步骤:

1.middle=(p+q)/2;

2.start=(middle+p)/2;

3.end=(middle+q)/2;

4.A[start]...A[middle]和A[middle+1]...A[end]互换;

5.令p=p.q=middle,回到2;

6.令p=middle+1,q=q,回到2;

真正写代码的时候遇到了不小的困难,发现上面的方法适合n为2的次幂的情况。如果n不是2的次幂,那么就不能完全照搬上面的思想,譬如:

A={a1,a2,a3,a4,a5,b1,b2,b3,b4,b5},令p=0,q=9,middle=4,start=2,如果把A[2]...A[4]与A[5]...A[7]互换,那么A将 变为

{a1.a2,b1,b2,b3,a3,a4,a5,b4,b5},如果以middle为边界分成两个数组,就是{a1,a2,b1,b2,b3},{a3,a4,a5,b4,b5},已经不满足数组A原来的结构,再用递归就一定出错。

我们知道,递归调用的时候,必须保证每次调用的参数满足同样的结构,所以上面的情况只能将A分为{a1,a2,b1,b2},{a3.a4.a5,b3,b4,b5},等于说是要将b1,b2插到a2,a3,a4的前面,当让如果直接插入的话时间复杂度会很好,所以还得采用互换的方式。代码如下:

1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace Chapter2._1
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 while (true)
13 {
14 //输入数据A={a1,a2,a3...an,b1,b2,b3...bn}
15 Console.WriteLine("请输入数组");
16 string input = Console.ReadLine();
17 string[] strInputs = input.Split(new char[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries);
18 int[] inputs;
19 try
20 {
21 inputs = new int[strInputs.Length];
22 for (int index = 0; index != strInputs.Length; index++)
23 {
24 inputs = int.Parse(strInputs);
25 }
26 }
27 //如果没有输入数据,就初始化为 A={1, 3, 5, 7, 9, 2, 4, 6, 8, 10}
28 catch (Exception ex)
29 {
30 inputs = new int[10] { 1, 3, 5, 7, 9, 2, 4, 6, 8, 10 };
31 }
32 //对数组处理
33 ReArrange(ref inputs);
34 //输出
35 foreach (int i in inputs)
36 {
37 Console.Write(i);
38 }
39 Console.WriteLine();
40 }
41 }
42 static void ReArrange(ref int[] an)
43 {
44 int p = 0, q = an.Length - 1;
45 Change(ref an, p, q);
46 }
47 static void Change(ref int[] an, int p, int q)
48 {
49 if (p + 1 < q)
50 {
51 int middle=(p+q)/2;
52 //如果n是偶数
53 if ((middle+1 - p) % 2 == 0)
54 {
55 int阅读更多内容

没有评论:

发表评论