ika 7 سال پیش
والد
کامیت
1706636685
5فایلهای تغییر یافته به همراه39 افزوده شده و 8 حذف شده
  1. 6 4
      8/Makefile
  2. 11 0
      8/Makefile.make
  3. 15 0
      8/function.cpp
  4. 2 0
      8/function.h
  5. 5 4
      8/main.cpp

+ 6 - 4
8/Makefile

@@ -1,12 +1,13 @@
 CC = /usr/bin/g++
 CFLAGS := -Wall -O3 -std=c++11
+LIBFUNC = /usr/lib/libfunc.so
 
 .PHONY: all
-all: main.o func.o
-	$(CC) $(CFLAGS) main.o func.o -o run.exe
+all: main.o $(LIBFUNC)
+	$(CC) $(CFLAGS) main.o -lfunc -o run.exe
 
-func.o: function.cpp function.h
-	$(CC) $(CFLAGS) -c function.cpp -o func.o
+$(LIBFUNC): function.cpp function.h
+	sudo $(CC) $(CFLAGS) -fPIC -shared -c function.cpp -o $(LIBFUNC)
 
 main.o: main.cpp function.h
 	$(CC) $(CFLAGS) -c main.cpp -o main.o
@@ -14,3 +15,4 @@ main.o: main.cpp function.h
 .PHONY: clean
 clean:
 	rm -f *.o run.exe
+	sudo rm $(LIBFUNC)

+ 11 - 0
8/Makefile.make

@@ -0,0 +1,11 @@
+CC = /usr/bin/g++
+CFLAGS := -Wall -O3 -std=c++11
+LIBFUNC = /usr/lib/libfunc.so
+LIBS := -lboost_system -lopenblas -lglog -lopencv_highgui -lopencv_imgproc -lopencv_core
+
+.PHONY: all
+all: outer_pj.o $(LIBFUNC)
+  $(CC) $(CFLAGS) -lfunc -fPIC -shared -c outer_pj.o -o libmy_pj.so
+
+outer_pj.o:
+  $(CC) $(CFLAGS) $(LIBS) -c /tmp/src/*.cpp -I/tmp/include -o outer_pj.o -fopenmp

+ 15 - 0
8/function.cpp

@@ -1,4 +1,5 @@
 #include <algorithm>
+#include <cstdlib>
 #include <iostream>
 #include <vector>
 
@@ -6,6 +7,20 @@
 
 using std::vector; using std::swap; using std::ostream;
 
+// 处理参数
+void read_arg(const int argc, char ***pargv, std::vector<int> &arr) {
+  char **argv = *pargv;
+  if (argc < 3)
+    throw std::invalid_argument("usage: ./run.exe [arr_size] [arr (split by space)]");
+  const size_t arr_size = strtoul(argv[1], NULL, 0);
+  if (arr_size + 2 != static_cast<size_t>(argc))
+    throw std::invalid_argument("arr_size dosen't fit");
+  int carr[arr_size];
+  for (size_t i = 0; i < arr_size; ++i)
+    carr[i] = strtol(argv[2 + i], NULL, 0);
+  arr = vector<int>(&carr[0], &carr[arr_size]);
+}
+
 // 检查beg与end之间有无重复值
 bool isdiff(vector<int> &arr, size_t beg, size_t end) {
   for (size_t i = beg; i < end; ++i) {

+ 2 - 0
8/function.h

@@ -1,6 +1,8 @@
 #ifndef FUNCTION_H
 #define FUNCTION_H
 
+void read_arg(const int, char ***, std::vector<int> &);
+
 bool isswap(std::vector<int> &, size_t, size_t);
 void perm_r(std::vector<int> &, size_t, size_t, std::vector<std::vector<int>> &);
 void permutation(std::vector<int> &, std::vector<std::vector<int>> &);

+ 5 - 4
8/main.cpp

@@ -3,14 +3,15 @@
 
 #include "function.h"
 
-using std::cin; using std::cout; using std::endl;
+using std::cout; using std::endl;
 using std::vector;
 
 int main(int argc, char **argv) {
-  vector<int> arr{1, 1, 2, 3};
-  vector<vector<int>> res{};
+  vector<int> arr;
+  vector<vector<int>> res;
+  read_arg(argc, &argv, arr);
   permutation(arr, res);
-  cout << "example:\n";
+  cout << "input:\n";
   print_arr(arr, cout) << "\n\nresult:\n[\n";
   for (const auto &vec : res) {
     cout << " ";