OS Linux Mint
就像标题最后说的那样,我希望找到并复制目录中的所有图像.
我发现:
找到目录中的所有jpg(或JPG)文件,并将它们复制到文件夹/ home/joachim/neu2中:
find . -iname \*.jpg -print0 | xargs -I{} -0 cp -v {} /home/joachim/neu2
Run Code Online (Sandbox Code Playgroud)
和
找到目录中的所有图像文件:
find . -name '*' -exec file {} \; | grep -o -P '^.+: \w+ image'
Run Code Online (Sandbox Code Playgroud)
我的问题首先是,我真的不懂语法.有人可以解释一下代码吗?
其次,有人可以连接这两个代码来生成一个符合我想要的代码;)
提前问候和感谢!
我在Windows 10下使用MSVC2013 64位编译器.
根据:
std::cout << arma::arma_version::as_string() << std::endl;
Run Code Online (Sandbox Code Playgroud)
我有Armadillio库的6.100.1版(Midnight Blue).
例如,我启用了C++ 11
auto il = { 10, 20, 30 };
for(auto ele : il)
cout<<ele<<endl;
Run Code Online (Sandbox Code Playgroud)
工作中.还正确添加了库,运行以下代码:
vec v;
v<<10<<20<<30;
cout<<v;
Run Code Online (Sandbox Code Playgroud)
但是尝试使用Armadillio的初始化列表失败了.
vec v = { 1.0, 2.0, 3.0 };
Run Code Online (Sandbox Code Playgroud)
导致编译错误:
错误:C2440:'初始化':无法从'initializer-list'转换为'arma :: Col'没有构造函数可以采用源类型,或者构造函数重载解析是模糊的
以下代码编译:
#include <vector>
#include <iostream>
#include <memory>
using namespace std;
class container
{
public:
container(){}
~container(){}
};
class Ship
{
public:
Ship(){}
//Ship(const Ship & other){cout<<"COPY"<<endl;}
//~Ship(){}
std::unique_ptr<container> up;
};
Ship buildShip()
{
Ship tmp;
return tmp;
}
int main(int argc, char *argv[])
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是如果我们包含用户定义的析构函数~Ship(){},那么只有在我们还包含用户定义的复制构造函数时,代码才会编译Ship(const Ship & other){cout<<"COPY"<<endl;}
简而言之:
编译:
Ship(){}
//Ship(const Ship & other){cout<<"COPY"<<endl;}
//~Ship(){}
Run Code Online (Sandbox Code Playgroud)
编译:
Ship(){}
Ship(const Ship & other){cout<<"COPY"<<endl;}
~Ship(){}
Run Code Online (Sandbox Code Playgroud)
不编译:
Ship(){}
//Ship(const Ship & other){cout<<"COPY"<<endl;}
~Ship(){}
Run Code Online (Sandbox Code Playgroud)
为什么插入用户定义的析构函数需要用户定义的复制构造函数,为什么我们在上面的例子中需要一个复制构造函数呢?
我希望上面的例子中不需要复制构造函数,因为甚至无法复制unique_ptr.
我们编写了一个自定义容器类,它应该能够支持基于for循环的rang,请参见此处:c ++ shell.运行该示例时,您可以看到它正在运行.
本质上,容器是指向Elements的指针的链接列表:
LinkedList ll;
ll.push_back(new Element(1));
ll.push_back(new Element(2));
ll.push_back(new Element(3));
for(LinkedList::iterator it = ll.begin(); it != ll.end(); ++it){
cout << it->some_value << endl;
}
for(Element ele : ll) {
cout << ele.some_value << endl;
}
Run Code Online (Sandbox Code Playgroud)
将打印123123.我们不明白的是:为什么ele基于循环的范围不是指针?或者更好的为什么这不起作用:
for(Element * ele : ll) {
cout << ele->some_value << endl;
}
Run Code Online (Sandbox Code Playgroud)
基本上我们希望通过std向量实现自定义链表的相同:
vector<Element*> vec{new Element(1),new Element(2),new Element(3)};
for(Element * ele : vec)
{
cout<<ele->some_value<<endl;
}
Run Code Online (Sandbox Code Playgroud) 考虑一个 Pandas 数据框,例如:
df = pd.DataFrame([[0,2],[1,0],[7,99]],index=[3,4,8], columns = ["R1","R2"])
Run Code Online (Sandbox Code Playgroud)
给予:
R1 R2
3 0 2
4 1 0
8 7 99
Run Code Online (Sandbox Code Playgroud)
当我想通过某个值的条件删除一行时,我要么使用
df = df.drop(df[df["R1"] == 1].index)
Run Code Online (Sandbox Code Playgroud)
或者
df = df.drop(df.index[np.where(df["R1"] == 1)[0]])
Run Code Online (Sandbox Code Playgroud)
或者
df = df.drop(df.loc[df['R1'] == 1].index)
Run Code Online (Sandbox Code Playgroud)
两个都超级麻烦。您知道实现此目的的更简单的语法吗?
例如,如果有类似 idrop 函数的东西,第二个选项会更易读:
df = df.idrop(np.where(df["R1"] == 1)[0])
Run Code Online (Sandbox Code Playgroud)
编辑:
我原以为这比df = df[df['R1'] != 1]仅仅删除一行的性能要低。(庞大的数据库...)
初始化称为矩阵的2D矢量.
std::vector<std::vector<int>> matrix(512,std::vector<int>(512));
Run Code Online (Sandbox Code Playgroud)
现在我想调整它的大小:
这有效:
matrix.resize(50);
for(int i = 0; i<matrix.size() ; i++)
matrix[i].resize(50);
Run Code Online (Sandbox Code Playgroud)
这不起作用:
matrix.resize(50);
for(auto ele : matrix)
ele.resize(50);
Run Code Online (Sandbox Code Playgroud)
我for(auto ele : container)在其他地方使用,我应该使用Microsoft Visual C++编译器12.0支持C++ 11.
c++ ×5
c++11 ×4
armadillo ×1
cmake ×1
containers ×1
dataframe ×1
destructor ×1
filtering ×1
find ×1
for-loop ×1
foreach ×1
grep ×1
hdf5 ×1
linux ×1
linux-mint ×1
pandas ×1
performance ×1
python ×1
qt ×1
range ×1
terminal ×1
unique-ptr ×1
vector ×1